繁体   English   中英

非const引用只能绑定到左值

[英]Non-const reference may only be bound to an lvalue

有人可以解释一下如何模拟这个错误吗? 以及这个抱怨的内容。

“在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM