我不確定爲什麼下面的代碼工作(VC++ 2013):傳遞右值參數的非const左值引用參數
void Foo(std::vector<int> &v) { }
在主:
std::vector<int> v;
Foo(std::move(v));
因爲沒有富定義了一個rvalue參數或一個常量左值引用我在印象之下,上面的代碼將無法編譯。到底是怎麼回事?
謝謝
我不確定爲什麼下面的代碼工作(VC++ 2013):傳遞右值參數的非const左值引用參數
void Foo(std::vector<int> &v) { }
在主:
std::vector<int> v;
Foo(std::move(v));
因爲沒有富定義了一個rvalue參數或一個常量左值引用我在印象之下,上面的代碼將無法編譯。到底是怎麼回事?
謝謝
該代碼不能工作。在任何符合標準的編譯器中,它必定會遭到嚴重破壞。你試圖從一個右值初始化一個非const引用到一個左值。不,不行。
需要指出的是,GCC和Clang都拒絕它。
MSVC++在歷史上始終允許非臨時性對象初始化非常量引用。我不知道它使用什麼語義,儘管我希望它能像const引用一樣進行一生的擴展。 –
@MattMcNabb你說的最後一件事情是有道理的,否則他們會做一些根本性錯誤的事情。 – 2014-03-06 14:32:38
編譯gcc 4.7上的錯誤,你在用什麼編譯器? – Brian
Visual Studio的標準違規行爲再次發生! :-D(說真的,這就是答案) – Xarn
將你的警告級別設置爲'/ W4',Visual Studio會警告你正在使用的非標準擴展。 – Praetorian