gpt4 book ai didi

c++ - 移动构造函数是否应该使用显式关键字?

转载 作者:行者123 更新时间:2023-12-02 01:45:06 25 4
gpt4 key购买 nike

该代码无法编译。但是,如果我从移动构造函数中删除 explicit 关键字,那么它就可以工作。为什么?

struct Bar {
Bar() {}
explicit Bar(const Bar& x) {}
explicit Bar(Bar&& x) {}
};

Bar bar() {
Bar x;
return x;
}

编译错误为:

error: no matching function for call to 'Bar::Bar(Bar&)'

最佳答案

return 语句复制初始化操作数的返回值。

复制初始化不考虑显式构造函数。但是 explicit 不会改变您定义的构造函数是复制和移动构造函数。因此不会声明其他隐式构造函数。

实际上,没有可行的构造函数来构造返回值。

如果您删除任一构造函数上的显式,则会有一个可行的构造函数来构造返回值,并且它将进行编译。由于 return 语句的特殊语义,如果移动构造函数不是显式的,则优先使用它。


复制和移动构造函数通常应该显式

关于c++ - 移动构造函数是否应该使用显式关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70994857/

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