c++ - C c;之间有什么区别吗?和 C c = C();?

标签 c++ initialization copy-constructor default-constructor

#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,看来我错了。为什么?

最佳答案

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

关于c++ - C c;之间有什么区别吗?和 C c = C();?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35861561/

相关文章:

c++ - 如何将 RAM 数据视为真实文件?

c++ - 将节点添加到链表的前面,然后计算链表中的节点数

c++ - 传递 boost::asio::ip::tcp::socket

arrays - 将数组分配给 int 指针时出现警告 : initialization of 'int *' from ' int' makes pointer from integer without a cast,

c++ - 默认初始化类成员总是可取的吗?

c++ - 初始化顺序问题

c++ - 如何允许临时对象使用非常量复制构造函数

c++ - CUDA 和复制构造函数

c++ - 错误 C2440 : 'initializing' : cannot convert from 'const temp1' to 'temp2'

c++ - 在复制构造函数中复制任何指针成员变量