【问题标题】:Pass by reference as rvalue通过引用作为右值传递
【发布时间】:2015-08-05 01:35:31
【问题描述】:

当我尝试调用 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
}

【问题讨论】:

  • 这是什么语言?不起作用的代码版本是什么样的? “将成员称为通过引用传递”是什么意思?
  • 除非函数打算修改参数,否则不应通过非常量引用接受参数

标签: c++ pass-by-rvalue-reference


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    int main() {
        Screen myScreen;
        position rowTmp = 4;
        position colTmp = 0;
        myScreen.move(rowTmp,colTmp); 
    }
    

    试试吧!

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

    【讨论】:

    • 请添加一些解释以帮助提问者;您的代码似乎确实解决了他的问题,但它本身并没有真正的用处。
    • 感谢您的建议。@Ken Y-N.我以后会注意这个问题的。
    猜你喜欢
    • 2017-11-26
    • 2013-08-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2020-01-23
    • 2018-08-29
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多