【发布时间】:2015-01-26 03:09:36
【问题描述】:
在以下代码中,我无法将临时对象作为参数传递给 printAge 函数:
struct Person {
int age;
Person(int _age): age(_age) {}
};
void printAge(Person &person) {
cout << "Age: " << person.age << endl;
}
int main () {
Person p(50);
printAge(Person(50)); // fails!
printAge(p);
return 0;
}
我得到的错误是:
error: invalid initialization of non-const reference of type ‘Person&’ from an rvalue of type ‘Person’
我意识到这与将 lValue 传递给期望 rValue 的函数有关...有没有办法通过使用 std::move 或其他方法将我的 lValue 转换为 rValue?我尝试采用一个常量参数,但这似乎不起作用。
【问题讨论】:
-
情况正好相反。您正在将右值传递给需要左值的函数。非 const 左值引用不能绑定到右值,但您可以改用
const左值引用。 -
“我尝试采用一个常量参数,但这似乎确实有效。”所以你解决了这个问题,但决定放弃这个解决方案,因为它似乎有效?
-
糟糕,我留下了一个不是!
标签: c++ pass-by-reference lvalue-to-rvalue