これが MS Visual C++ でコンパイルされるのはなぜですか?
struct myClass{};
void func(myClass& arg){}
void main() {
func( myClass() ); // works even though func only takes myClass&
} // (not const myClass&!!)
これは他のコンパイラでも機能しますか、それともこの MSVC 固有のものですか (またはコンパイラのバグですか?)。次のように、この右辺値の参照を取得することもできます。
void func(myClass* arg){}
int main() {
func( &myClass() );
}
これは、コンストラクターで一時的に作成されたオブジェクトに対してのみ機能します。これは、たとえば (myClass() + myClass()) のような他の右辺値では機能しません..