在旧版本中使用新的 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
标志指定)视为有效,并向其他一些可能有害的构造添加诊断。
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
标志指定)视为有效,并向其他一些可能有害的构造添加诊断。