非const引用只能绑定到左值

Non-const reference may only be bound to an lvalue

本文关键字:绑定 const 引用      更新时间:2023-10-16

有人能解释一下如何模拟这个错误吗?

c++

"非const引用只能绑定到左值"

一个左值,大致就是赋值语句左边的内容。引用为其他对象提供别名:

std::string s;
std::string & rs = s;  // a non-const reference to s
std::string const & crs = s; // a const reference to s

根据上述定义,引用rscrs与引用s是相同的,除了不能通过crs修改所引用的字符串,因为它是const。变量是左值,因此允许将非const引用绑定到它。相反,可以将const引用绑定到临时值,如下所示:

std::string const & crs1 = std::string();

但是下面是不合法的:

std::string & rs1 = std::string();

这是因为使用非const引用意味着要修改被引用的对象。但是,当引用超出作用域时,绑定到引用的临时将被销毁。由于c++创建临时对象时并不总是直观的,因此不允许将它们绑定到非const引用,以避免您随心所欲地更改对象,只是为了在几条语句之后看到它被销毁。

这意味着你不能这样做:

void foo(int &x) { ... }
int bar()        { ... }
foo(bar());

您需要使foo接受const引用,或将bar()的结果赋值给变量,然后将其传递给foo

相关文章: