【问题标题】:Is there any difference between C c; and C c = C();?C c 有什么区别吗?和 C c = C();?
【发布时间】: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


【解决方案1】:

这是复制省略的一个示例 - 基本上允许编译器优化复制。此处描述: http://en.cppreference.com/w/cpp/language/copy_elision

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2010-09-09
    • 2013-06-16
    • 2011-05-13
    • 2021-08-31
    • 2014-03-21
    • 2019-09-13
    相关资源
    最近更新 更多