编码:
// test2.cpp
#include <vector>
#include <iostream>
struct test_class
{
test_class() = default;
test_class(const test_class& t)
{
std::cout << "Copied" << std::endl;
}
};
int main()
{
test_class a;
std::vector<test_class> v;
for (int i = 0; i < 5; ++i) {
v.push_back(a);
std::cout << std::endl;
}
}
行为:
$ g++ --version | grep g++
g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
$ g++ -std=c++11 test2.cpp
$ ./a.out
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
每个都push_back
执行“未定义”数量的副本(必须执行一个副本)。
这里发生了什么?