c++ - 为什么 g++ 4.9.0 默认有 std::isnan?

标签 c++ c++11 g++ 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

是否有一个标志可以从<cmath>中取出函数?

最佳答案

编译器开发人员懒于完全删除应该只在下一版本标准中可用的所有功能,尤其是当相关库 (C99) 同时具有这些功能时。

实用程序(验证您的代码实际上遵守特定标准)还不足以让编译器编写者非常努力地让他们的编译器提供该服务。

相反,通常会发生的是在特定标准标志下实现新功能。有时他们会被意外地向后移植。当标准最终确定时,部分实现会存在一段时间,直到它变得足够好为止。

然后开始制定下一版本的标准。下一个版本标志会为您提供不太稳定的开发环境,因为新功能会被尝试、丢弃和更改。

它在不向后移植方面付出了一些努力,但它并不是一个阻碍。

关于c++ - 为什么 g++ 4.9.0 默认有 std::isnan?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44464707/

相关文章:

c++ - 标识符 calcHist() 在 C++ 的 OpenCV 中未定义

c++ - 为什么 imaxdiv_t __cdecl 在这样的函数中不想在/clr :pure? 下编译

c++ - 用于程序内容的快速伪随机数生成器

c++ - 如何存储由 std::unique_ptr 给出的抽象类对象的 vector ?

libraries - 对符号 'BIO_ctrl@@libcrypto.so.10' 的 undefined reference

c++ - 我可以像 Julia 中的 Rcpp 的 stop() 一样在 c 代码中抛出错误吗

c++ - 使用表复制指向对象的指针

c++ - 成员函数模板,其参数数量取决于一个完整的模板参数

c++ - 静态库加载相关问题

gcc - MinGW 4.8.1 C++11 线程支持