2014-05-08 43 views
6

我正在使用Visual Studio 2013 Express。當向量<char> &&被綁定到向量時,編譯器不會抱怨<char>&

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到標準::移動(L),編譯器會抱怨「不能從‘詮釋’轉換參數2‘詮釋&’」。

+3

這是一個錯誤。它不能同時使用g ++ 4.9.0和clang ++ 3.4。 – kec

回答

4

這是Visual C++編譯器提供的一種語言擴展,現在已經存在很長一段時間了。該擴展允許您將右值(tempoarary)綁定到非const引用,並延長值的生命週期,就像綁定到const引用一樣。如果啓用警告級別4或顯式啓用警告C4239,編譯器會提醒您任何時候使用擴展。

C4239的文檔中包含一個與您的問題類似的示例。

相關問題