c++ - 要抛出的对象的构造函数可以抛出异常吗?

标签 c++ exception throw

在C++中,要抛出的对象的构造函数本身抛出异常是否有效?换句话说,当我们还在构建要抛出的对象时,我们是否已经在抛出?

struct Error {
  Error() {
    if (someCondition()) {
      throw anotherObject();
    }
  }
};

void test() {
  throw Error();
}

最佳答案

throw 表达式需要是 throw Error();,但是是的,这是有效的。

在抛出 Error 对象之前,必须构造它。即,子表达式 Error() 必须先求值,然后才能在完整表达式中求值 throw 运算符。如果子表达式 Error() 本身的计算抛出异常,则完整表达式的其余部分(即 throw)将不会被计算。

关于c++ - 要抛出的对象的构造函数可以抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737436/

相关文章:

scala - 如何在 Scala 中转换失败的 future 异常?

c++ - 数组如何与条件运算符一起使用?

c++ - 基于物理的渲染结果看起来不正确

c++ - 构造函数中的 fp 赋值崩溃 [C++]

php - 我应该在表示层中抛出异常吗?

java - Java中Unreachable语句是一种错误而不是警告?

java - 列表已满时抛出IllegalArgumentException

javascript - 为什么我不能将其放入 Promise.catch 处理程序中?

c++ - Visual C++ 断言失败

c++ - 与 at() 或索引相比,为什么使用 C++ 迭代器会显着增加代码大小?