gpt4 book ai didi

c++ - 为什么 -std=c++98 标志有时不起作用?

转载 作者:行者123 更新时间:2023-12-05 02:31:17 25 4
gpt4 key购买 nike

情况如下:

我想创建一个简单的 C++ 程序,但它必须使用 C++98 函数。
我正在使用 Ubuntu 20.04.4 LTS .
我正在使用 c++作为编译器
我正在使用以下标志进行编译: -Wall -Werror -Wextra -std=c++98 -pedantic-errors

现在如果我使用函数 stoi()来自 <string> , 编译将如预期的那样失败,因为 stoi()是 C++11,如你所见 here .


但是这里出现了我无法理解的奇怪行为:
使用 roundroundf来自 <cmath>不会触发 -std=c++98旗帜,尽管如此,从我所看到的here , 所有 round函数是 C++11。

有什么好的解释为什么会这样吗?


编辑:
作为jjramsey提到,round 的标准 C 函数有可能被使用了,所以 -std=c++98 flag 对此没有影响。谁能证实这个理论?

最佳答案

没有什么能阻止编译器实现任何预标准。例如,Visual Studio 2010 不是标准的 C++11 编译器,但(在某种程度上)实现了 lambda。

C++98 标志的唯一期望是实现了 C++98 的所有(希望)功能。除此之外的任何东西都只是编译器已实现的预标准 C++11/14/17 等“奖励”。

当然,这些奖金不是官方的,大部分是基于 future 的 C++ 标准草案。一旦 11/14/17 等的 C++ 标准出现,那些旧编译器中引入的许多功能要么是非标准的,要么无法正常工作,要么缺失。

关于c++ - 为什么 -std=c++98 标志有时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71576001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com