JET*_*ETM 0 c++ g++ c++11 g++4.9
我的理解是该功能std::isnan仅从C++ 11开始提供.此外,除非特别说明,否则g++使用-std=gnu++98.
那为什么这会编译?
>> cat test.cpp
#include <cmath>
int main(int argc, char** argv)
{
return std::isnan(0);
}
>> g++ test.cpp
Run Code Online (Sandbox Code Playgroud)
是否有一个标志来取出该功能<cmath>?
编译器开发人员很难完全删除只能在下一版标准中使用的每个功能,特别是当相关库(C99)同时拥有它时.
实用程序(保护代码实际上遵循特定的标准)不足以使编译器编写者极其努力地使他们的编译器提供该服务.
相反,通常会发生的是新功能是在特定的标准标志下实现的.有时他们会被意外地向后移植.当标准最终确定时,部分实现会存在一段时间,直到它变得足够好.
然后开始下一版标准的工作.下一个版本标志为您提供了一个不太稳定的开发环境,因为尝试了新功能并将其丢弃和更改.
它投入了一些努力而不是向后移动,但它并不是一个显而易见的东西.
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |