【问题标题】:using new c++11 feature in older versions在旧版本中使用新的 c++11 功能
【发布时间】:2017-11-30 07:13:49
【问题描述】:
  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 重新编译它?

【问题讨论】:

    标签: c++ c++11 compilation compiler-warnings


    【解决方案1】:

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

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

    【讨论】:

    • 你也可以开启“警告为错误”-Werror
    猜你喜欢
    • 2014-06-06
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多