Aut*_*tch 31 c++ initialization stdvector language-lawyer
之间有什么区别?
auto x = vector<int>();
Run Code Online (Sandbox Code Playgroud)
和
vector<int> x;
Run Code Online (Sandbox Code Playgroud)
这两个声明是否相等,或者运行时复杂度是否有所不同?
son*_*yao 43
自C ++ 17起,它们具有相同的效果。两者都构造一个名为x
type 的对象std::vector<int>
,该对象由的默认构造函数初始化std::vector
。
精确的第一个是复制初始化,x
是从值初始化的临时复制初始化。从C ++ 17开始,保证了这种复制省略,因为结果x
是std::vector
直接由默认构造函数初始化的。在C ++ 17之前,复制省略是一种优化:
即使它发生并且没有调用copy / move(自C ++ 11起)构造函数,它仍然必须存在并且可以访问(好像根本没有优化发生),否则该程序格式错误:
第二个是默认初始化,因为类类型x
是由默认构造器初始化的std::vector
。
请注意,其他类型的行为可能有所不同,具体取决于类型的行为和x
存储时间。
归档时间: |
|
查看次数: |
1626 次 |
最近记录: |