c++临时变量

C++临时变量

“有时候,在求表达式的期间,编译器必须创建临时变量(temporary object)。像其它任何对象一样,它们需要存储空间,并且必须能够构造和销毁。需要注意的是,编译器创建的这个临时变量为常量.” – Thinking in C++

什么情况下编译器会创建临时变量

看下面代码:

class A{
public:
  print(){
    cout<<"hello world"<<endl;
  }
}
A generateA(){
  A a = A();
  return a;
}

int main(){
  A a = generateA();
  generateA();
}

A a = generateA()时,编译器不会创建临时变量,因为在generateA()返回之前,就已经把函数里面的a对象拷贝给了main函数中的a对象。

generateA()这句会使编译器创建一个临时对象,因为generateA()是有返回值的,但是在main函数中并没有对象来收留它,所以编译器会创建一个临时对象来收留它,为可能的后续操作做准备。例如:generateA().print()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Pythonista

python内建函数

abs()函数返回数字(可为普通型、长整型或浮点型)的绝对值。如果给出复数,返回值就是该复数的模。例如:

1001
来自专栏程序员互动联盟

【专业技术】你必须注意的11个C++要点

下面的这些要点是对所有的C++程序员都适用的。我之所以说它们是最重要的,是因为这些要点中提到的是你通常在C++书中或网站上无法找到的。如:指向成员的指针,这是许...

2675
来自专栏CDA数据分析师

12道 Python面试题总结

1、Python是如何进行内存管理的? Python的内存管理主要有三种机制:引用计数机制、垃圾回收机制和内存池机制。 a. 引用计数 当给一个对象分配一个新名...

2349
来自专栏淡定的博客

php面向对象容易忘记的几个知识点

802
来自专栏ml

javaSE基础之基本细节注解

  1.  对于多行注释而言,不能进行嵌套注释.....! /* dada /* d adasdas */...

2534
来自专栏炉边夜话

java 异常处理学习笔记

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

702
来自专栏Laoqi's Linux运维专列

正则三剑客-grep

先来普及一下基础知识! ^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换...

2526
来自专栏landv

Java对象和类

1524
来自专栏nimomeng的自我进阶

Block官方文档

a) 像函数一样有定义好的参数 b) 有返回值 c) 能从定义的作用域中捕获状态(值) d) ...

852
来自专栏C/C++基础

RTTI简介

RTTI是Runtime Type Identification的缩写,是“运行时类型识别”的意思。面向对象的编程语言,象C++,Java,Delphi都提供了...

813

扫码关注云+社区