错误:从“int"类型的右值初始化“int&"类型的非常量引用无效 [英] error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’

查看:37
本文介绍了错误:从“int"类型的右值初始化“int&"类型的非常量引用无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

错误的形式:

int &z = 12;

正确形式:

int y;
int &r = y;

问题:
为什么第一个代码是错误的?标题中错误的含义"是什么?

推荐答案

C++03 3.10/1 说:每个表达式要么是左值,要么是右值."重要的是要记住,左值与右值是表达式的属性,而不是对象的属性.

C++03 3.10/1 says: "Every expression is either an lvalue or an rvalue." It's important to remember that lvalueness versus rvalueness is a property of expressions, not of objects.

左值命名对象超出单个表达式.例如, obj*ptrptr[index]++x 都是左值.

Lvalues name objects that persist beyond a single expression. For example, obj , *ptr , ptr[index] , and ++x are all lvalues.

右值是在它们所在的完整表达式的末尾(在分号处")消失的临时变量.例如, 1729x + ystd::string("meow")x++ 是所有右值.

Rvalues are temporaries that evaporate at the end of the full-expression in which they live ("at the semicolon"). For example, 1729 , x + y , std::string("meow") , and x++ are all rvalues.

address-of 运算符要求其操作数应为左值".如果我们可以取一个表达式的地址,那么这个表达式就是一个左值,否则就是一个右值.

The address-of operator requires that its "operand shall be an lvalue". if we could take the address of one expression, the expression is an lvalue, otherwise it's an rvalue.

 &obj; //  valid
 &12;  //invalid

这篇关于错误:从“int"类型的右值初始化“int&"类型的非常量引用无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆