我是 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/