【发布时间】:2016-04-01 15:32:34
【问题描述】:
vector<int>(v1) 表达式产生一个临时对象,并且可以放在operator= 的右侧,但是如果我们使用vector<int>(v1) 表达式作为语句,它将在 Visual Studio 2010 10.0.30319.1 RTMRel 中失败.详细的错误信息在以下代码中的 cmets 中。为什么会这样?
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),是什么意思?
【问题讨论】:
-
请在代码行前使用四个空格将其标记为代码,并添加换行符(用于以后的帖子,因为@Yu Hao已经编辑了您当前的帖子)
-
"如果我们使用
vector(v1)表达式作为语句,[它失败]" -- 好的,但你为什么要这样做?你想完成什么? -
您为什么认为这是一个有效的声明?你预计它会产生什么影响?
-
这是歧义解决的结果。如果一个构造可以被解析为一个声明,那么它就是一个声明