c++ - 为什么抛出的对象必须进行复制初始化?

标签 c++ exception c++14

异常使用对象的静态类型来复制初始化抛出的对象。例如:

struct foo
{
    foo() = default;
    foo(const foo&) = delete;
};

int main()
{
    throw foo();
}

Clang++ --std=c++14 提示无法使用显式删除的复制构造函数。为什么它不能移动初始化呢?

最佳答案

它不能移动构造,因为该类型没有移动构造函数。删除的复制构造函数会抑制隐式移动构造函数。

关于c++ - 为什么抛出的对象必须进行复制初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33111800/

相关文章:

c++ - 运算符(operator)填写的模板

java - Java 中异常的速度

c++ - 如何将可变参数模板参数转换为另一种类型以调用另一个函数?

c++ - 为什么我的链表 "next"指针解引用到错误的内存(XCode,C++)

c++ - 如何在不知道 IID 的情况下创建 CLSID 的 COM 对象实例

c++ - 类型已知时如何调用 std::forward

exception - Perl 5 的鲤鱼的 raku 类似物是什么?

java - 模拟小型图书馆查询系统时出现NumberFormatException

c++ - 当此构造函数采用初始化列表并委托(delegate) vector 时,是什么导致此构造函数委托(delegate)给自身?

c++ - 捕获具有特定模板参数的类