以下代码使用空的C + 11样式初始化程序。运行时,结果是std::vector
包含一个项目,该项目似乎是默认构造的。
这显然是一个人为的案例,并且有更好的方法来构建空向量。 Nonetheles,这种行为是违反直觉的。这是编译器/ 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
答案 0 :(得分:7)
Container c;
是一个空容器或Container c{};
Container c{{}};
使用默认构造的std::shared_ptr<int>
Container c{{},{}};
构建了2 shared_ptr
s
答案 1 :(得分:3)
初始化列表不是空的而不是Container c {{}};使用Container c({}); //传递初始化列表。容器c {}将默认初始化。