vector<int>(v1)
表达式会产生一个临时对象,可以放在operator=
的右边,但如果我们将vector<int>(v1)
表达式用作语句,在Visual Studio 2010 10.0.30319.1 RTMRel中会失败。以下代码中的注释提供了详细的错误信息。为什么会发生这种情况呢?
vector<int> v1;
v1.push_back( 10 );
v1.push_back( 20 );
v1.push_back( 30 );
vector<int> v3 = vector<int>(v1); //OK, deliberately code like this.
vector<int>(v1); //error C2086: “std::vector<_Ty> v1”: redefinition
在书籍《C++编码规范:101条规则、指南和最佳实践》的第82章“使用已被接受的习语来真正缩小容量并真正删除元素”。其中有一句话:
container<_Type>(c).swap(c);
我不理解,只是想测试
container<_Type>(c)
,这是什么意思?
vector(v1)
表达式用作语句,[它会失败] -- 好的,但是你为什么想要这样做呢?你想要实现什么目标? - Brian Cain