情况如下:
我想创建一个简单的c++程序,但它只能使用C ++98函数。
我在用Ubuntu 20.04.4 LTS。
我正在使用c++编译器,
我使用以下标志进行编译:
-Wall -Werror -Wextra -std=c++98 -pedantic-errors
stoi()现在,如果我使用来自 的函数<string>,编译将会失败,正如预期的那样,因为它是 C++11,正如您在此处stoi()看到的。
但这里出现了我无法理解的奇怪行为:
使用round或roundffrom<cmath>不会触发该-std=c++98标志,尽管从我在这里看到的所有round函数都是 C++11 的。
为什么会发生这种情况有什么好的解释吗?
编辑:
正如jjramsey提到的,有可能round使用了标准 C 函数,因此该-std=c++98标志对此没有影响。谁能证实这个理论?
没有什么可以阻止编译器实现任何预标准的东西。例如,Visual Studio 2010 不是标准的 C++11 编译器,但(在某种程度上)实现了 lambda。
对 C++98 标志的唯一期望是实现 C++98 的所有(希望)功能。除此之外的任何内容都只是编译器已实现的预标准 C++11/14/17 等“奖励”。
当然,这些奖励并不是官方的,而且大多数都是基于未来 C++ 标准的草案。一旦 2017 年 11 月 14 日的 C++ 标准等出现,那些旧编译器中引入的许多功能要么是非标准的,要么无法正常工作,要么缺失。