Jam*_* Ko 3 c++ macros noexcept c++11
我是 C++ 初学者,正在学习一些 C++11 功能。我注意到的一件事是,在 Visual C++ stdlib 的某些部分中,作者使用了宏_NOEXCEPT而不是noexcept关键字。将鼠标悬停在宏上显示#define _NOEXCEPT noexcept,所以我有点困惑它的意义是什么。两者之间有什么区别,我应该选择其中一个而不是另一个?
编辑:我刚刚在 GitHub 上搜索了它,看起来clang也使用了它,所以它不是 Visual C++ 特定的宏。
_NOEXCEPT不是标准宏。这是由前导下划线表示的,表示这属于实现。
throw()这个宏很可能是在 Visual C++ 编译器获得对noexceptC++11 中引入的关键字的支持之前定义的。
也就是说,它最初是作为一种编写与多个版本的编译器兼容的代码的方法而提供的。以类似的方式,我们可以定义一个宏,例如CPPX_NORETURN使用特定于编译器的方法来指示不返回函数,其中[[noreturn]]不支持 C++ 属性。等等。