gpt4 book ai didi

c++ - 未检测到-std = c++ 03编译

转载 作者:行者123 更新时间:2023-12-01 15:13:21 25 4
gpt4 key购买 nike

我正在将这个简单的代码编译为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,这非常令人困惑。

关于c++ - 未检测到-std = c++ 03编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60903083/

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