在Visual Studio 2012RC中有一些非標準的擴展。例如,此代碼彙編:左值轉換左值Visual Studio
#include <string>
using namespace std;
void value(string& value)
{
value = "some";
}
int main()
{
value(string("nice"));
}
並得到警告,它是非標準的擴展名。所以,我想了解,它是如何真實的以及代碼如何轉換(使用const_cast的右值引用或const引用)?
AFAIK,Visual Studio 2010(也許2008)也支持這種行爲。 VC++編譯器允許修改臨時對象。 – flamingo 2012-07-16 16:39:23
請注意,這是最糟糕的風格,最壞的情況下容易出錯([「你不關心它是你正在修改的臨時版嗎?」)(http://stackoverflow.com/a/1565811/768469)) – Nemo 2012-07-16 16:59:19
@火烈鳥:那麼,修改C++中的臨時對象從來就不是非法的。它始終被允許在C++中調用非const *修飾*臨時對象的成員函數。然而,使用「直接」語法附加非const引用是非法的。如我的答案所示,前者實際上允許人們繞過後者。 – AnT 2012-07-16 17:04:04