gpt4 book ai didi

c++ - 为什么当我在复制构造函数中添加一个作为参数的不同对象时调用复制构造函数?

转载 作者:行者123 更新时间:2023-11-30 03:15:38 25 4
gpt4 key购买 nike

我不明白为什么在将 e 添加到 c 时调用复制构造函数。

struct A {};
struct B {
B() { std :: cout << "B Constructor" << std :: endl; }
B(const A&) { std :: cout << "B Copy" << std :: endl;}
const B operator +(const B& arg);
};

const B B::operator +(const B& arg) {
std :: cout << "+" << std :: endl;
return B();
}

int main() {
B c;
A e;
c + e;
}

最佳答案

调用的不是复制构造函数,而是

B(const A&);

复制构造函数总是有这样一个签名:

B(const B&);

因为你没有提供一个,编译器为你生成了一个复制构造函数,但是这个确实没有被调用:你有一个 operator+ for B,它接受 const B&,但另一个操作数是 A 类型。由于首先提到的构造函数 (B(const A&)) 是隐式,因此可以解决 - 从 实例化一个临时的 B一个名为 e 对象,并调用运算符。

为了使示例中的输出更直观,请考虑将构造函数 B(const& A) 更改为

B(const A&) { std::cout << "Construct B from A\n"; }

关于c++ - 为什么当我在复制构造函数中添加一个作为参数的不同对象时调用复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56900158/

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