C c; 和 C c = C(); 有什么区别吗?(涉及IT技术)

6
#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,但事实证明我错了。为什么?


5
关键词:返回值优化,复制省略。 - user2486888
3
因为编译器比你想象的更聪明。 - Mehrdad
关键词:值初始化复制初始化 - juanchopanza
感谢 @Nicky。最佳答案:https://dev59.com/v2cs5IYBdhLWcg3wTyRl - expoter
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接