C++ 编译器没有';当向量<;char>&&;绑定到向量<;char>&;
我正在使用Visual Studio 2013 ExpressC++ 编译器没有';当向量<;char>&&;绑定到向量<;char>&;,c++,rvalue-reference,C++,Rvalue Reference,我正在使用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::mo
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;
}
B类{
公众:
向量&a;
国际酒店;
B(向量&i,int&c):a(i),B(c){}
};
int main(){
int l=3;
向量h;
共享的ptr bb(新的B(标准::移动(h),l));
返回0;
}
<>为什么代码可以被接受?当我将参数L改为STD::(L)时,编译器会抱怨“不能将参数2从int”转换为“int &”, < p>这是VisualC++编译器中可用的语言扩展,现在已经存在了相当长的时间。扩展允许您将右值(临时值)绑定到非常量引用,并像绑定到
const
引用一样延长值的生存期。。如果启用警告级别4或显式启用警告C4239,则编译器将在使用扩展时向您发出警报
的文档包括一个与您的问题类似的示例。这是一个bug。它在g++4.9.0和clang++3.4中都失败了。