Visual Studio 2012RCには、非標準の拡張機能がいくつかあります。たとえば、次のコードをコンパイルします。右端値から左端値への変換Visual Studio
#include <string>
using namespace std;
void value(string& value)
{
value = "some";
}
int main()
{
value(string("nice"));
}
これは非標準の拡張であると警告します。だから、私は理解したい、それが本当で、どのようにコードが変換されるのか(rvalue-referenceかconst_castのconst参照)を知りたいですか?
AFAIK、Visual Studio 2010(および多分2008年)もこの動作をサポートしています。 VC++コンパイラは、一時的なオブジェクトの変更を許可します。 – flamingo
これは最高の悪いスタイルであり、最悪の場合はバグが発生しやすいことに注意してください(["一時的な変更は気にしないでください]"(http://stackoverflow.com/a/1565811/768469)) – Nemo
@ flamingo:C++で一時的なオブジェクトを変更することは決して不法ではありません。 C++では一時変数の非const * modification *メンバ関数を常に呼び出すことが許されています。しかし、 "直接"構文を使用して非const参照を付けることは不正です。私の答えに示されているように、前者は実際に後者を回避することができます。 – AnT