在C++ 11及更高版本的标准中,是否保证当函数返回一个类对象时调用(可能是异常抛出)拷贝是而不是 - 如果为此类定义了移动ctor?背景:假设C++ 11:通过值返回对象不会在定义移动ctor时抛出异常吗?
struct X {
X() {}
X(const X&) {/* code that might throw exceptions */}
X(X&&) {/* code that never throws exceptions */}
...
};
和
X my_func(some_type& t)
{
X x;
// code that modifies t and x but never throws exceptions
return x;
}
现在,确实,例如,这样的表达式
some_other_func(my_func(t));
从未抛出异常(?即是此保证)提供的功能some_other_func(const X&)
不会抛出异常?那么如果some_other_func
的签名是some_other_func(X)
呢?
在你的假设情况下,'X'的默认构造函数是否保证不会抛出? –
@ChrisDrew它在上面,它是一个空构造函数。 – Yakk
@Yakk,当然,我想知道是否有什么缺失,因为我很惊讶'X'可以被构造和填充而不会抛出,但不能被丢弃而不被复制。 –