我必须编写一个代码,可以支持更新和更旧的编译器,我想知道在我开始之前这样的事情可能吗?
#ifndef C++11 { //some code..... }
#endif
else
#ifndef older C++ version { //some code......}
#endif
Run Code Online (Sandbox Code Playgroud)
该标准要求符合C++ 11的实现定义一个__cplusplus以该值命名的宏201103L.建议不合格编译器使用最多五位小数的值.对于C++ 03来说也是如此,其中应该定义的值是199711L.
然而,并没有多少编译器认为(ed)自己符合标准,例如gcc定义这个很长一段时间1L.此外,您还必须考虑它不仅是编译器版本,还包括编译器的参数.GCC仅支持(一部分)C++ 11传递时,-std=c++0x或-std=gnu++0x.在这些情况下,它将定义一个宏__GXX_EXPERIMENTAL_CXX0X__.
因此,最便携的解决方案是不可移植并且拥有您在检测到C++ 11支持时设置的宏,并且有一些头/配置脚本,您可以在其中使用上述内容,以及其他可能的其他支持编译器.