两者之间有什么区别
auto x = vector<int>();
和
vector<int> x;
这两个声明是否相等,或者运行时复杂度是否有差异?
答案 0 :(得分:43)
自C ++ 17起,它们具有相同的效果。两者都构造了一个类型为x
的名为std::vector<int>
的对象,该对象由std::vector
的默认构造函数初始化。
第一个精确地是copy initialization,x
是从value-initialized临时复制初始化的。从C ++ 17开始,保证了这种copy elision,因为结果x
是由std::vector
的默认构造函数直接初始化的。在C ++ 17之前,复制省略是一种优化:
即使它发生并且没有调用copy / move(由于C ++ 11)构造函数,它仍然必须存在并且可以访问(好像根本没有优化发生),否则该程序格式错误:
第二个是default initialization,因为类类型x
由std::vector
的默认构造函数初始化。
请注意,其他类型的行为可能有所不同,具体取决于类型的行为和x
的存储持续时间。