【发布时间】:2013-03-27 07:50:33
【问题描述】:
代码如下:
#include <iostream>
using namespace std;
class A {
};
A rtByValue() {
return A();
}
void passByRef(A &aRef) {
// do nothing
}
int main() {
A aa;
rtByValue() = aa; // compile without errors
passByRef(rtByValue()); // compile with error
return 0;
}
g++编译器报错:
d.cpp: In function ‘int main()’:
d.cpp:19:23: error: invalid initialization of non-const reference of type ‘A&’ from an rvalue of type ‘A’
d.cpp:12:6: error: in passing argument 1 of ‘void passByRef(A&)’
它说我不能将右值作为非常量引用的参数传递,但我很困惑的是为什么我可以分配给这个右值,正如代码所示。
【问题讨论】:
-
是的,非常量引用不能绑定到临时对象。
-
奇怪。我可以在 MS VS 2010 中编译和运行它。
-
@chris 但为什么我可以分配给它。我可以分配给它,为什么我不能将它作为参考传递?
-
你用的是什么编译器?
-
@0x499602D2 他使用 g++ 而我是 VS 2010
标签: c++ assignment-operator temporary rvalue