lea*_*ude 1 c++ c++-standard-library c++03
我将这个简单的代码编译为 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 };
}
Run Code Online (Sandbox Code Playgroud)
我收到以下编译错误:
main.cpp: 在函数 'int main()':
main.cpp:39:18: 错误:在 C++98 中,'array2' 必须由构造函数初始化,而不是由 '{...}'
std::vector数组 2 = { 9, 7, 5, 3, 1 };
^~~~~~
main.cpp:39:43: 错误:无法将 '{9, 7, 5, 3, 1}' 从 '' 转换为 'std::vector'
std::vector array2 = { 9 , 7, 5, 3, 1 };
似乎即使我正在使用-std=c++03(初始化列表可用的地方)进行编译,但我仍在使用 C++98 标准。为什么会这样?
我知道此代码将使用更新的标准进行编译。
为什么会这样?
因为语法仅可用于聚合初始化。std::vector不是聚合,因此它不能被聚合初始化。
C++11 引入了更通用的列表初始化以及std::initializer_list类型和构造函数,用于向量和其他将与列表初始化语法一起使用的容器。
您在评论中链接的文章并不完美:
在 C++03 中引入,std::vector 提供...
std::vector 是在第一个标准版本 C++98 中引入的。
Run Code Online (Sandbox Code Playgroud)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 是非常令人困惑的。
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |