c++ - noexcept 关键字和 _NOEXCEPT 宏有什么区别?

标签 c++ c++11 macros noexcept

我是 C++ 的初学者,正在学习 C++11 的一些功能。我注意到的一件事是,在 Visual C++ stdlib 的某些部分,作者使用了 _NOEXCEPT 宏而不是 noexcept 关键字。将鼠标悬停在宏上会显示 #define _NOEXCEPT noexcept,所以我有点搞不懂它的意义所在。两者之间有什么区别,我应该更喜欢一个吗?


编辑: 我刚刚在 GitHub 上搜索了它,它看起来像 clang也使用它,因此它不是特定于 Visual C++ 的宏。

最佳答案

_NOEXCEPT 不是标准宏。这由前导下划线表示,表示这属于实现。

在 Visual C++ 编译器获得对 C++11 中引入的 noexcept 关键字的支持之前,这个宏很可能被定义为 throw()

也就是说,它最初是作为一种编写与多个版本的编译器兼容的代码的方式提供的。以类似的方式,人们可能会定义一个宏,如 CPPX_NORETURN 以使用特定于编译器的方式来指示不返回函数,其中不支持 C++ 属性 [[noreturn]] .等等。

关于c++ - noexcept 关键字和 _NOEXCEPT 宏有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33840230/

相关文章:

c++ - 查看 !address REGionUsageIsVAD WinDBG 中的实际数据

c++ - 如何在 C++ 中将输入字符串转换为数组?

c++ - move 语义和完美转发的区别

macros - Clojure 如何在源文件中扩展宏与 Repl

c++ - 另一个宏中的 Q_PROPERTY 宏

c++ - 无法在 VS2015 中重定向项目

c++ - 奇变量赋值

c++ - 如何在C++中重载<<<用于 vector <int>的运算符

c++ - 具有多态性的类中灵活的数组成员

c++ - 取消定义和重新定义 __cplusplus 宏