"__cplusplus"宏扩展到什么?

Top*_*ter 4 c++ macros c++11

  • C++宏__cplusplus包含和扩展到什么?
  • __cplusplus即使在最旧的C++实现中,宏总是包含并扩展为数值吗?
  • 使用安全#if __cplusplus 还是我们应该使用而不是那样#ifdef __cplusplus

Mat*_*usz 7

是的,它总是扩展到数值,它的含义是正在使用的C++标准的版本.根据cppreference 页面,__cplusplus宏应扩展为:

  • 199711L(直到C++ 11),
  • 201103L(C++ 11),
  • 201402L(C++ 14),
  • 201703L(C++ 17)

#if#ifdef指令之间的区别在于#ifdef应该用于检查是否已定义给定宏以允许编译一段代码.

在另一方面#if(#else,#elif)指令可以用来检查指定的条件是否满足(就像典型的,如果条件).

  • 当然,如果您在 90 年代初尝试使用标准前的 c++,那么该标准并不存在,就像现在您可以使用 c++20 进行实验一样。如果您仍在使用这样的编译器,那么所有赌注都没有了,但是您的理智必须受到质疑。:-) (3认同)
  • 是的,C++ 98标准明确地这样说 - 我检查了我的副本. (2认同)