Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用-std=c+编译+;03未检测到_C++_C++03_C++ Standard Library - Fatal编程技术网

C++ 使用-std=c+编译+;03未检测到

C++ 使用-std=c+编译+;03未检测到,c++,c++03,c++-standard-library,C++,C++03,C++ Standard Library,我将此简单代码编译为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 }; } #包括 int main(){ std::矢量阵列; 向量数组2={9,7,5,3,1}; } 我收到以下编译错误: main.cpp:在函数“int main()

我将此简单代码编译为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 };
}
#包括
int main(){
std::矢量阵列;
向量数组2={9,7,5,3,1};
}
我收到以下编译错误:

main.cpp:在函数“int main()”中:
main.cpp:39:18:错误:在C++98中,“array2”必须由构造函数初始化,而不是由“{…}”初始化
向量数组2={9,7,5,3,1};
                  ^~~~~~
main.cpp:39:43:错误:无法将“{9,7,5,3,1}”从“”转换为“std::vector”
向量数组2={9,7,5,3,1}


看起来,即使我使用
-std=c++03
(初始化列表可用)进行编译,我仍然使用c++98标准。为什么会这样

我知道这段代码将使用更新的标准编译

为什么会这样

因为该语法仅适用于聚合初始化
std::vector
不是聚合,因此无法对其进行聚合初始化

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


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


在C++03中引入的std::vector提供了

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

std::vector array2={9,7,5,3,1};//使用初始值设定项列表初始化数组
std::向量数组3{9,7,5,3,1};//使用统一初始化来初始化数组(C++11以后)
第一行还需要C++11,这一点让人非常困惑

为什么会这样

因为该语法仅适用于聚合初始化
std::vector
不是聚合,因此无法对其进行聚合初始化

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


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


在C++03中引入的std::vector提供了

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

std::vector array2={9,7,5,3,1};//使用初始值设定项列表初始化数组
std::向量数组3{9,7,5,3,1};//使用统一初始化来初始化数组(C++11以后)

如果没有提到第一行还需要C++11,那就非常令人困惑了。

“(在初始化列表可用的地方)”您的前提是错误的。你从哪里得到的?C++03与C++98没有太大区别,实际上从我的头脑中我无法分辨两者之间的区别。这里的答案还说,您需要C++11“在C++03中引入,std::vector…”这是错误的/误导性的。我不知道这到底是指什么<代码>标准::向量在C++98中已经存在。别担心,这篇包含错误/误导性信息的在线教程不是例外,而是规则。我建议你从一个替代品中学习。我能向自己解释的唯一方法是,他们使用c++03和c++98作为同义词,这在某种程度上是合理的,因为c++03主要是错误修复,只引入了一个新功能(我必须查找它,它是值初始化)”(在初始化列表可用的地方)你的前提是错误的。你从哪里得到的?C++03与C++98没有太大区别,实际上从我的头脑中我无法分辨两者之间的区别。这里的答案还说,您需要C++11“在C++03中引入,std::vector…”这是错误的/误导性的。我不知道这到底是指什么<代码>标准::向量在C++98中已经存在。别担心,这篇包含错误/误导性信息的在线教程不是例外,而是规则。我建议你从一个替代者那里学习。我能向自己解释的唯一方法是,他们使用c++03和c++98作为同义词,这在某种程度上是合理的,因为c++03主要是错误修复,只引入了一个新功能(我必须查找,这是值初始化)
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)