【发布时间】:2018-08-27 23:55:01
【问题描述】:
在§[except.throw] 中,标准规定抛出异常会从 throw 表达式复制初始化异常对象
抛出异常会复制初始化(11.6、15.8)一个临时对象,称为异常对象
那么为什么下面的代码会在 C++17 上编译呢?
class Exception {
public:
Exception() = default;
Exception(Exception&&) = delete;
Exception(const Exception&) = delete;
};
int main() {
throw Exception{};
return 0;
}
(https://wandbox.org/permlink/R3WfzfnBAORTLVSy)
复制初始化不包括任何符合prvalue省略的情况(从我看来)。那么为什么上面的代码在 C++17 中编译呢?
【问题讨论】:
-
您是否对为什么不使用复制构造函数感到困惑?您是否将复制初始化与复制构造混为一谈?
标签: c++ exception exception-handling c++17 prvalue