在旧版本中使用新的 c++11 功能

using new c++11 feature in older versions

  int main(){

    int x{1};
    cout << "Value of x = " << x << endl;
}

这里我使用“{}”语法来初始化我的变量 x 并且它完全正常工作

Value of x = 1

同时使用 g++ --std=c++11

进行编译

删除生成的 .out 文件并使用 g++ --std=c++98 重新编译后,我收到以下警告。

main.cpp:10:7: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
  int x{1};

但是当 运行 .out 文件时,我仍然得到所需的输出。

在这里我想知道到底发生了什么。为什么得到正确的输出。天气编译器正在用 --std=c++11 ?

重新编译它

GCC 很乐意将代码编译为带有一些扩展的 C++98。它可能接受部分或全部 C++11 功能,也可能不接受。默认行为通常是接受它可能理解的任何代码,即使它不是严格有效的 C++。

为了严格遵守,您可以添加 -pedantic-errors 开关。它将使 GCC 仅将真正的 ISO C++(由 --std 标志指定)视为有效,并向其他一些可能有害的构造添加诊断。