我理解使用foo(const int& a)
。这可用于调用类似foo(1)
的内容,foo(int& a)
将失败。
现在我正在尝试创建这个类:
class temp {
public:
int a;
temp(int x = 5) : a(x) {}
void foo_val(temp a) { /* ... */ }
void foo_ref(temp& a) { /* ... */ }
};
void main() {
temp temp1(6);
temp1.foo_val(temp1); // foo_val(temp a) is called
temp1.foo_ref(temp()); // foo_ref (temp& a) is called
}
我不明白为什么temp1.foo_ref(temp())
成功了。我们怎样才能有一个带右值的引用(在这种情况下为temp()
)。我期待它只有foo_ref(const temp& a)
成功。我是否错误地考虑了右值。
答案 0 :(得分:3)
我不明白为什么
temp1.foo_ref(temp())
成功。
使用void main() { ... }
判断,您必须拥有旧的或不符合标准的编译器。
temp1.foo_ref(temp());
应该失败。我使用g ++ 4.8.4得到以下错误。
g++ -Wall -std=c++11 socc.cc -o socc
socc.cc: In function ‘int main()’:
socc.cc:13:22: error: no matching function for call to ‘temp::foo_ref(temp)’
temp1.foo_ref(temp()); //foo_ref (temp& a) is called
^
socc.cc:13:22: note: candidate is:
socc.cc:6:7: note: void temp::foo_ref(temp&)
void foo_ref(temp& a){}
^
socc.cc:6:7: note: no known conversion for argument 1 from ‘temp’ to ‘temp&’