use*_*316 0 c c++ arrays initialization vector
我正在阅读有效c ++的书,其中一些页面说:
如果您处于C++的C部分并且初始化可能会产生运行时成本,则无法保证发生.如果你进入C++的非C部分,事情有时会发生变化.这就解释了为什么一个数组(来自C++的C部分)不一定能保证其内容被初始化,而是一个向量(来自C++的STL部分).
我想知道为什么来自c ++的c部分的数组不能保证被初始化,但是一个向量是?c部分的数组不是内置类型吗?但为什么向量(来自C++的STL部分)保证初始化?
因为这就是标准所说的.在C++规范的早期,决定不改变C中定义的类型的工作方式.因此,T[]只有1)类型T具有构造函数,2)存在显式初始化或3)具有静态生存期时,才初始化array().既然
std::vector不是从C继承的,那么就没有C先例可以关注.由于您可以对矢量执行的某些操作需要复制,因此必须对其进行初始化.复制未初始化的值是未定义的行为.
请注意,在C++ 11中,std::array遵循C规则.(这样做是为了允许聚合初始化.)
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |