为什么这会在 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()) 之类的任何其他右值。