string foo() { return "hello"; }
int main()
{
//below should be illegal for binding a non-const (lvalue) reference to a rvalue
string& tem = foo();
//below should be the correct one as only const reference can be bind to rvalue(most important const)
const string& constTem = foo();
}
- GCCは、コンパイルエラーを発生させるのに適しています。
std::string&
一時型の型から非定数型の参照の初期化が無効です。std::string
- VS2008は、少なくともコンパイル警告を出すのでそれほど悪くはありません:警告C4239:使用される非標準拡張:'初期化':から
std::string
へstd::string &
の変換非定数参照は左辺値にのみバインドできます - ここに問題のあるものがあります-VS2010(SP1)はエラーや警告なしで正常に完了します、なぜ?? !! VS2010の右辺値参照を使用して右辺値とバインドできることは知っていますが、使用していません。
&&
代わりに、デモコードでは、非定数左辺値参照を使用していました。
誰かがここでVS2010の動作を説明するのを手伝ってくれますか?バグですか!?ありがとう