{auto x = vector <int>()”和“ vector <int> x”有什么区别?

时间:2019-04-16 03:15:30

标签: c++ initialization language-lawyer stdvector

两者之间有什么区别

auto x = vector<int>();

vector<int> x;

这两个声明是否相等,或者运行时复杂度是否有差异?

1 个答案:

答案 0 :(得分:43)

自C ++ 17起,它们具有相同的效果。两者都构造了一个类型为x的名为std::vector<int>的对象,该对象由std::vector的默认构造函数初始化。

第一个精确地是copy initializationx是从value-initialized临时复制初始化的。从C ++ 17开始,保证了这种copy elision,因为结果x是由std::vector的默认构造函数直接初始化的。在C ++ 17之前,复制省略是一种优化:

  

即使它发生并且没有调用copy / move(由于C ++ 11)构造函数,它仍然必须存在并且可以访问(好像根本没有优化发生),否则该程序格式错误:

第二个是default initialization,因为类类型xstd::vector的默认构造函数初始化。

请注意,其他类型的行为可能有所不同,具体取决于类型的行为和x的存储持续时间。