非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
根据上述定义,引用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
。
相关文章:
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 在只读(即 const)访问器上执行结构化绑定的最佳实践是什么?
- 错误:对类型 'const ItemInstance' 的引用无法绑定到类型 'void' 的右值
- 为什么"const auto [x, y]"绑定到引用类型时没有按预期运行?
- 为什么静态常量字符 * const 变量在为左值时可绑定到右值引用参数
- 对类型"项 *const"的引用无法绑定到类型为"const 项 *"的右值
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 为什么我的运算符=(T&&)模板只绑定到一个const&而不是一个&&?
- 错误:将"const double"绑定到类型为"double&"的引用会丢弃限定符
- 我应该始终使用"T&&"而不是"const T&"或"T&"来绑定到回调函数吗?
- 当int的值明确更改时,为什么引用对const int(绑定到int)的值会更改
- C++17:是编译器为(静态存储持续时间)const引用绑定创建的可修改的临时对象(和存储)
- std::clamp - 检测函数返回值是否绑定到 const T&
- 结构化绑定中的const引用扩展了分解对象的寿命
- C++ const&绑定到临时对象
- 为什么从三元文字中绑定到const引用副本
- 为什么 const 数组优先绑定到 const T& 参数而不是 T&& 参数?
- 通过将返回值绑定到const引用,C++性能得到改善
- 为什么不能将"const char*"的左值绑定到"const char* const&&?
- 构造函数中的 const int 引用是否可以安全地绑定到文本