gpt4 book ai didi

c++11 - 空的 C++11 初始值设定项列表导致具有一个默认构造对象的容器

转载 作者:行者123 更新时间:2023-12-04 22:46:56 25 4
gpt4 key购买 nike

下面的代码使用一个空的 C+11 样式初始化器。运行时结果是 std::vector包含一项,似乎是默认构造的。

这显然是人为的情况,有更好的方法来构造空向量。尽管如此,这种行为是违反直觉的。这是编译器/c++ 运行时库错误吗?

我怀疑 std::vector 之一的其他构造函数实际上在这里被调用。

#include <iostream>
#include <memory>
#include <vector>

int main(int argc, const char * argv[])
{
typedef std::vector<std::shared_ptr<int>> Container;

Container c{{}};

std::cout << "Vector size is: " << c.size() << std::endl;

for (auto item: c)
{
std::cout << "Item: " << item.get() << std::endl;
}
}

输出:
Vector size is: 1
Item: 0x0
Program ended with exit code: 0

编译器:
$ clang  --version
Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn)
Target: x86_64-apple-darwin12.4.0

最佳答案

Container c;是一个空容器或 Container c{};Container c{{}};使用默认构造的 std::shared_ptr<int> 构造容器
Container c{{},{}};构造 2 shared_ptr

关于c++11 - 空的 C++11 初始值设定项列表导致具有一个默认构造对象的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189491/

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