gpt4 book ai didi

c++ - 当我们进行复制初始化时,复制构造函数或构造函数是否起作用

转载 作者:行者123 更新时间:2023-11-30 02:43:27 25 4
gpt4 key购买 nike

#include <iostream>

using namespace std;

class ExClass
{
int data;
ExClass(const ExClass&);

public:
ExClass() : data(0) {}
ExClass(int d) : data(d) { cout<<"Constructor"<<endl; }
};

int main()
{
ExClass var(2);
ExClass var2=2;

return 0;
}

为了测试当我使用复制初始化时它是调用复制构造函数还是构造函数,我将复制构造函数设为私有(private)。虽然它适用于 visual c++ 2005,但代码块 13.12(使用 C++11 标准编译)会出错。

当我按原样运行时,它给出:

Constructor 

Constructor

作为输入。

我是否正确认为这意味着 var(2)var2=2 具有相同的含义并且它们都调用同一个构造函数?

如果是,为什么 codeblocks 会出错?由于它不使用复制构造函数,因此不应出错。

最佳答案

这...

ExClass var2=2;

...等同于此...

ExClass var2 = ExClass(2);

...名义上调用复制构造函数,但标准有一项特殊规定,允许将其省略到 var2 的直接构造中。这是编译器可以选择执行的可选优化 - 只有如果编译器没有省略,复制构造函数的缺失定义才有意义。无论哪种方式,编译器都必须检查复制构造是否是合法操作(例如,它没有被删除)。

因此,两个编译器都是正确的,实际上同一个编译器可能会出错,也可能不会出错,这取决于调用它时使用的命令行优化标志。

关于c++ - 当我们进行复制初始化时,复制构造函数或构造函数是否起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com