我对这个代码片段的输出很好奇。
#include <vector>
#include <iostream>
struct base
{
static int id;
base() {std::cout << "C" << std::endl; mid = id; id++;}
//base(const base&) {std::cout << "Co" << std::endl;}
//base(base &&) {std::cout << "Mo" << std::endl;}
~base() {std::cout << "D" << mid << std::endl;}
int mid;
};
int base::id = 0;
int main()
{
std::vector<base> v;
v.emplace_back();
std::cout << "First" << std::endl;
v.emplace_back();
std::cout << "Second" << std::endl;
}g++ 4.7.2显示了输出
C
First
C
D0
Second
D0
D1我不明白为什么"D0“出现在第二个"C”之后。此外,为什么在输出中出现两次"D0“?
这种行为是否符合C++11标准,还是与“实现质量”相关?
发布于 2014-06-03 13:41:32
在添加对象时,vector正在调整大小。reserve在开始时有足够的空间,您将看到所期望的输出。
std::vector<base> v;
v.reserve(2); // now there's enough capacity to contain at least 2 objects
v.emplace_back();
std::cout << "First" << std::endl;
v.emplace_back();
std::cout << "Second" << std::endl;输出:
C
First
C
Second
D0
D1现场演示
https://stackoverflow.com/questions/24016590
复制相似问题