Передать по ссылке как значение

Когда я пытаюсь вызвать элемент перемещения как передачу по ссылке, компилятор выдает ошибку, но когда я переопределяю функцию-член для передачи по значению, это работает.

Могу ли я не использовать передачу по ссылке в качестве значения в моей функции-члене?

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

2 ответа

Нет, rvalue не может быть передана как неконстантная ссылка lvalue. Это может быть передано как ссылка const lvalue, потому что компилятор создаст временную переменную для указания lvalue.

int main() {
    Screen myScreen;
    position rowTmp = 4;
    position colTmp = 0;
    myScreen.move(rowTmp,colTmp); 
}

Попытайся!

Вам нужно создать две реальные переменные для "Pass by refrrence".

Другие вопросы по тегам