gpt4 book ai didi

c++ - 为什么 c++ 在以下情况下生成构造函数?

转载 作者:行者123 更新时间:2023-11-27 22:52:20 25 4
gpt4 key购买 nike

我有一个A类

struct A{
A(){}

A(int x): d(x) {}

A(const A& a): d(a.d) {
std::cout << "copy construction" << std::endl;
}

A(A&& a): d(a.d){
std::cout << "move construction" << std::endl;
}

A& operator=(const A& a){
std::cout << "copy assignment" << std::endl;
d = a.d;
return *this;
}

A& operator=(A&& a){
std::cout << "move assignment" << std::endl;
d = a.d;
return *this;
}

int d;
};

和一个函数func

A func(){
return A(3);
}

如果我这样做

A x;
x = func();

输出是预期的“move 分配”但是如果我这样构建 A

A x = func();

然后什么都不打印,就好像 c++ 生成了自己的 move 构造函数并拒绝使用定义的构造函数。

我正在使用 visual studio 14

我真的很想了解这一点。

感谢您的解释。

最佳答案

省略了构造函数调用。

  • 对于 gcc,您可以使用 -fno-elide-constructors 禁用它。
  • msvc 没有等效选项。

关于c++ - 为什么 c++ 在以下情况下生成构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36177332/

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