什么是" __ cplusplus"宏扩大到?

时间:2018-04-19 07:43:22

标签: c++ c++11 macros

  • C ++宏__cplusplus包含什么并扩展为?
  • __cplusplus是否始终(即使在最旧的C ++实现中)包含并扩展为 numeric 值?
  • 使用#if __cplusplus是否安全 或者我们应该使用而不是#ifdef __cplusplus

2 个答案:

答案 0 :(得分:7)

是的,它总是扩展为数值,其含义是正在使用的C ++标准的版本。根据cppreference page__cplusplus宏应扩展为:

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

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

另一方面,#if#else#elif)指令可用于检查是否满足指定条件(就像典型的if条件一样)。

答案 1 :(得分:2)

__cplusplus需要由C ++标准定义。对于C ++ 11或更高版本,__cplusplus > 199711L应保留true

  

宏__cplusplus是否始终,即使在最旧的C ++实现中,   包含并扩展为数值?

是的。

19.8 C ++ 11

__cplusplus
     

整数字面积201703L。 [注意:这是为了未来   本国际标准的版本将取代其价值   具有更大价值的宏。 - 结束说明]

C++98

  

__cplusplus这个名字   _   编译C时,_cplusplus定义为值199711L   ++翻译单位。 143)

相关问题