我正在使用Visual Studio 2013 Express。
class B{
public:
vector<char>& a;
int& b;
B(vector<char>& i,int& c) :a(i),b(c) {}
};
int main(){
int l=3;
vector<char> h;
shared_ptr<B> bb (new B(std::move(h),l));
return 0;
}
为什么可以接受代码?当我将参数l更改为std :: move(l)时,编译器会抱怨“无法将参数2从'int'转换为'int&amp;'”。
答案 0 :(得分:4)
这是Visual C ++编译器中提供的语言扩展,现在已存在很长时间了。扩展允许您将rvalue(tempoarary)绑定到非const引用并延长值的生命周期,就像绑定到const
引用一样。如果启用警告级别4或明确启用警告C4239,编译器会在使用扩展程序时提醒您。
C4239的文档包含一个与您问题中的内容类似的示例。