1

当我尝试将移动成员调用为按引用传递时,编译器会引发错误,但是当我重新定义成员函数以按值传递时,它可以工作。

我不能在成员函数中使用按引用传递作为右值吗?

#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
}
4

2 回答 2

5

不,右值不能作为非常量左值引用传递。它可以作为 const 左值引用传递,因为编译器将创建一个临时值来指向左值。

于 2015-08-05T01:39:13.457 回答
1
int main() {
    Screen myScreen;
    position rowTmp = 4;
    position colTmp = 0;
    myScreen.move(rowTmp,colTmp); 
}

试试看!

您需要为“通过参考”创建两个实变量。

于 2015-08-05T02:09:09.877 回答