首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未检测到用-std=c++03编译

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

Stack Overflow用户
提问于 2020-03-28 15:55:27
回答 1查看 464关注 0票数 1

我将这段简单的代码编译为g++ main.cpp -o -o -std=c++03

代码语言:javascript
复制
#include <vector>
int main(){
    std::vector<int> array;
    std::vector<int> array2 = { 9, 7, 5, 3, 1 };
}

我得到了以下编译错误:

main.cpp:在函数‘int():main.cpp:39:18: error: in C++98’array2‘必须由构造函数初始化,而不是由’{.}‘std::vector array2={ 9,7,5,3,1}初始化;(3)无法将“{ 9,7,5,3,1}”从“9,7,5,3,1}”转换为“向量”std::向量array2 ={9,7,5,3,1 };

虽然我正在用-std=c++03编译(其中有初始化列表),但我仍然使用C++98标准。为什么会发生这种情况?

我知道这段代码会用更新的标准编译。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-28 15:59:10

为什么会发生这种事?

因为语法只适用于聚合初始化。std::vector不是聚合,因此不能初始化聚合。

C++11引入了更一般的列表初始化以及std::initializer_list类型,以及用于向量和其他容器的构造函数,这些容器将与列表初始化语法一起使用。

您在评论中链接的文章并不完美:

在C++03中引入,std::载体提供.

std::vector是在第一个标准版本C++98中引入的。

std::array2 ={ 9,7,5,3,1 };//使用初始化程序列表初始化数组std::array3 { 9,7,5,3,1 };//使用统一初始化来初始化数组(C++11继续)

不提第一行也需要C++11,这是非常令人困惑的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60903083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档