C++ 我需要为一个函数到处写 throw 子句吗?

标签 c++ exception exception-handling declaration

之前

考虑有一个类和一个全局函数:

例如,usefulfuncts.hpp

void dosome(int a, int b) throw (std::exception);

这是usefulfuncts.cpp

void dosome(int a, int b) throw (std::exception) {
   //...
}

这是aclass.hpp

class aclass {
   // Members...
   friend void dosome(int a, int b) throw (std::exception);
   // Members...
};

之后(我想要的)

好的!我想了解是否有必要每次都编写 throw 子句。例如,我可以这样做吗?

这是usefulfuncts.hpp

void dosome(int a, int b) throw (std::exception);

这是usefulfuncts.cpp

void dosome(int a, int b) { /* OMITTING IT! */
   //...
}

这是aclass.hpp

class aclass {
   // Members...
   friend void dosome(int a, int b); /* OMITTING IT */
   // Members...
};

这样对吗?只把它放在主要声明中?谢谢

最佳答案

省略异常说明意味着您的函数可以抛出任何 异常。

异常规范很糟糕。几乎没有任何编译器可以正确实现该功能。自 C++11 标准以来,它们已被弃用。事实上,异常规范被认为是一个失败的实验,即使它们是 C++03 标准的一部分。

好读:
A Pragmatic Look at Exception Specifications

关于C++ 我需要为一个函数到处写 throw 子句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11258709/

相关文章:

java - 在检查套接字的连接时从 BlueToothSocket 的 InputStream 中畅通读取

Java编程异常

asp.net-mvc - 发生异常时返回特殊的 JsonResult

c++ - Protocol Buffers C++ 中的异常处理

控制台中未显示 flutter 异常

vb.net - 如何在PowerShell中捕获未处理的错误

c++ - 如何访问CompleteAsyncIO中的IOMemoryBufferDescriptor,它是通过中断EP上的AsyncIO发送的

c++ - 使用 C/C++ 在 Windows (XP/2003) 上创建 ZIP 文件

c++ - std::vector 访问内存的次数几乎是原始指针的两倍——为什么?

c++ - 在 qt 中用 C++ 创建 .csv 文件