情况如下:
我想要创建一个简单的c++程序,但它必须只使用C++98函数。
我正在使用Ubuntu 20.04.4 LTS。
我使用c++作为编译器
我使用以下标志进行编译:-Wall -Werror -Wextra -std=c++98 -pedantic-errors
现在,如果我使用来自<string>的函数<string>,编译将如预期的那样失败,因为stoi()是C++11,正如您可以看到的这里。
但我无法理解的奇怪行为来了:
使用round或来自<cmath>的roundf不会触发-std=c++98标志,尽管根据我所看到的这里,所有round函数都是C++11。
有什么好的解释来解释为什么会这样吗?
编辑:
正如杰拉姆西所提到的,有可能使用round的标准C-函数,因此-std=c++98标志对此没有任何影响。有人能证实这个理论吗?
发布于 2022-03-22 17:01:57
没有什么能阻止编译器实现任何预先标准的东西。例如,Visual 2010不是一个标准的C++11编译器,但是实现了(在某种程度上)lambda。
对C++98标志的唯一期望是实现了C++98的所有特性(希望如此)。除此之外,编译器已经实现了一个预标准的C++11/14/17等“奖励”。
当然,这些奖金不是官方的,而且大多数都是基于未来C++标准草案。当11/14/17等的C++标准出现后,在这些旧编译器中引入的许多特性要么是不标准的,要么无法正常工作,或者缺少。
https://stackoverflow.com/questions/71576001
复制相似问题