【发布时间】:2016-06-22 01:19:29
【问题描述】:
#include<iostream>
using namespace std;
class C{
private:
int value;
public:
C(){
value = 0;
cout<<"default constructor"<<endl;
}
C(const C& c){
value = c.value;
cout<<"copy constructor"<<endl;
}
};
int main(){
C c1;
C c2 = C();
}
输出:
默认构造函数
默认构造函数
问题:
对于C c1;显然会调用默认构造函数,对于C c2 = C();我以为会调用默认构造函数来初始化一个临时对象,然后会调用复制构造函数来初始化c2,看来我错了。为什么?
【问题讨论】:
-
关键词:返回值优化,复制省略。
-
因为编译器比你想象的要聪明。
-
关键字:值初始化,复制初始化。
-
感谢@Nicky。最佳答案:stackoverflow.com/questions/12953127/…
标签: c++ initialization copy-constructor default-constructor