とペアを構築:この中で右辺値
vector<pair<string,int>> vp;
string s;
int i;
while(cin>>s>>i) vp.push_back({s,i});
は私が最後の行について興味があります。ペアはpush_back
の呼び出しで作成されるため、コピーされずに移動されます。
ではなく、このように書かれていなかった場合は、次の組の構成は同じリソースを必要とする一方で、
vector<pair<string,int>> vp;
string s= ...;
int i= ...;
pair<string,int> p{s,i};
vp.push_back(p);
今ペアが命名され、p
、したがって、それはもはや右辺値であるため、セマンティクスを動かしますもはや使用されていないので、これは値渡しとなり、コピーが作成されます。
これは、可能であれば、argリストの中にオブジェクトを構築することがパフォーマンスの向上であることを意味します。誰でも確認できますか?
コンパイラの最適化によって異なります。 –
2番目の例では、同じstd :: pairをpushしますが、空のstd :: stringとunknown/random int - correct? – Nick
@Nick真の場合、この場合は空です(このコードはC++のfaqからです)。しかし、私はpush_backセマンティクスについてもっと心配しています – johnbakers