gpt4 book ai didi

c++ - 为什么c++中数组的内容有时没有初始化?

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:33 25 4
gpt4 key购买 nike

我正在读effective c++这本书,其中有几页是这样说的:

如果您在 C++ 的 C 部分并且初始化可能会产生运行时成本,则不能保证会发生。如果你进入 C++ 的非 C 部分,情况有时会发生变化。这解释了为什么数组(来自 C++ 的 C 部分)不一定保证其内容已初始化,但 vector (来自 C++ 的 STL 部分)可以。

我想知道为什么不能保证初始化来自 c++ 的 c 部分的数组,但 vector 可以? c部分的数组不是内置类型吗?但是为什么 vector (来自 C++ 的 STL 部分)保证被初始化?

最佳答案

因为标准就是这么说的。在很早的时候C++ 规范,决定改变方式C 中定义的类型有效。所以数组 (T[]) 只是如果 1) T 类型有一个构造函数,2) 有一个显式初始化或 3) 它具有静态生命周期。自从std::vector 不是从 C 继承的,没有 C 的先例关心。而且由于您可以执行某些操作在 vector 上需要复制,它必须被初始化。复印未初始化的值是未定义的行为。

请注意,在 C++11 中,std::array 遵循 C 规则。 (这样做是为了允许聚合初始化。)

关于c++ - 为什么c++中数组的内容有时没有初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18912381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com