[英]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
鉴于上述定义,引用rs
或crs
与引用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.