未检测到使用 -std=c++03 进行编译
Compiling with -std=c++03 not detected
我正在将这个简单的代码编译为 g++ main.cpp -o main -std=c++03
#include <vector>
int main(){
std::vector<int> array;
std::vector<int> array2 = { 9, 7, 5, 3, 1 };
}
我收到以下编译错误:
main.cpp: In function ‘int main()’:
main.cpp:39:18: error: in C++98 ‘array2’ must be initialized by constructor, not by ‘{...}’
std::vector array2 = { 9, 7, 5, 3, 1 };
^~~~~~
main.cpp:39:43: error: could not convert ‘{9, 7, 5, 3, 1}’ from ‘’ to ‘std::vector’
std::vector array2 = { 9, 7, 5, 3, 1 };
似乎即使我正在使用 -std=c++03
(初始化列表可用)进行编译,我仍在使用 C++98 标准。为什么会这样?
我知道这段代码可以用更新的标准编译。
Why is this happening?
因为语法只适用于聚合初始化。 std::vector
不是聚合体,因此不能进行聚合体初始化。
C++11 引入了更通用的列表初始化,以及 std::initializer_list
类型,以及 vector 和其他将与列表初始化语法一起使用的容器的构造函数。
您在评论中链接的文章并不完美:
Introduced in C++03, std::vector provides ...
std::vector
是在第一个标准版本 C++98 中引入的。
std::vector<int> array2 = { 9, 7, 5, 3, 1 }; // use initializer list to initialize array
std::vector<int> array3 { 9, 7, 5, 3, 1 }; // use uniform initialization to initialize array (C++11 onward)
不提第一行也需要 C++11 是非常令人困惑的。
我正在将这个简单的代码编译为 g++ main.cpp -o main -std=c++03
#include <vector>
int main(){
std::vector<int> array;
std::vector<int> array2 = { 9, 7, 5, 3, 1 };
}
我收到以下编译错误:
main.cpp: In function ‘int main()’:
main.cpp:39:18: error: in C++98 ‘array2’ must be initialized by constructor, not by ‘{...}’
std::vector array2 = { 9, 7, 5, 3, 1 };
^~~~~~
main.cpp:39:43: error: could not convert ‘{9, 7, 5, 3, 1}’ from ‘’ to ‘std::vector’
std::vector array2 = { 9, 7, 5, 3, 1 };
似乎即使我正在使用 -std=c++03
(初始化列表可用)进行编译,我仍在使用 C++98 标准。为什么会这样?
我知道这段代码可以用更新的标准编译。
Why is this happening?
因为语法只适用于聚合初始化。 std::vector
不是聚合体,因此不能进行聚合体初始化。
C++11 引入了更通用的列表初始化,以及 std::initializer_list
类型,以及 vector 和其他将与列表初始化语法一起使用的容器的构造函数。
您在评论中链接的文章并不完美:
Introduced in C++03, std::vector provides ...
std::vector
是在第一个标准版本 C++98 中引入的。
std::vector<int> array2 = { 9, 7, 5, 3, 1 }; // use initializer list to initialize array std::vector<int> array3 { 9, 7, 5, 3, 1 }; // use uniform initialization to initialize array (C++11 onward)
不提第一行也需要 C++11 是非常令人困惑的。