1

moveメンバーを参照渡しとして呼び出そうとすると、コンパイラはエラーをスローしますが、メンバー関数を再定義して値渡しすると機能します。

メンバー関数で右辺値として参照渡しを使用できませんか?

#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 左辺値参照として渡すことはできません。ただし、コンパイラは左辺値を指す一時的なものを作成するため、const 左辺値参照として渡すことができます。

于 2015-08-05T01:39:13.457 に答える