我有以下代码:
#include <iostream>
#include <vector>
using namespace std;
class A {
public:
A() {
}
A(const A &a) {
cout << "Copied!" << endl;
}
};
int main()
{
vector<A> vec;
vec.push_back(A());
vec.push_back(A());
vec.push_back(A());
cout << "Hello World" << endl;
for (A &a: vec) {
cout << "loop1" <<endl;
}
for (A a: vec) {
cout << "loop2" <<endl;
}
return 0;
}
我运行了这个程序并打印了:
Copied!
Copied!
Copied!
Hello World
loop1
loop1
loop1
Copied!
loop2
Copied!
loop2
Copied!
loop2
我的问题是为什么要复印?调用时push_back(A())
为什么没有省略副本?在行for (A a: vec)
中为什么没有省略副本?
我正在使用以下命令进行编译:
sh-4.3# g++ -std=c++11 -O3 -o main *.cpp