当我尝试将 move 成员调用为引用传递时,编译器会抛出错误,但是当我重新定义成员函数以传递值时,它会起作用。
我的成员函数中是否可以不使用pass by reference作为rvalue?
#include <iostream>
#include <string>
class Screen{
private:
std::string contents;
using position = std::string::size_type;
position height,width,cursor_position;
public:
Screen() = default;
Screen& move(position&,position&); // Pass by reference
};
Screen& Screen::move(position& row,position& col)
{
(*this).cursor_position = (row * width) + col;
return *this;
}
int main() {
Screen myScreen;
myScreen.move(4,0); // This line gives a compile error
}
答案 0 :(得分:5)
不,rvalue不能作为非const左值引用传递。它可以作为const左值引用传递,因为编译器将创建一个临时指向左值。
答案 1 :(得分:1)
int main() {
Screen myScreen;
position rowTmp = 4;
position colTmp = 0;
myScreen.move(rowTmp,colTmp);
}
试试吧!
您需要创建两个真正的变量,以便通过折扣&#39;。