下面的代码使用空的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;
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Vector size is: 1
Item: 0x0
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)
编译:
$ clang --version
Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn)
Target: x86_64-apple-darwin12.4.0
Run Code Online (Sandbox Code Playgroud)
Container c; 是一个空容器或 Container c{};
Container c{{}}; 用默认构造的方法构造容器 std::shared_ptr<int>
Container c{{},{}};构造2 shared_ptrs
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |