Jag*_*gan 2 c c++ operator-precedence
int main()
{
int i=3;
(++i)++;
printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)
这个程序适用于g ++编译器,但不适用于gcc.如果我写i ++++或++ i ++,它在cpp中也不起作用.我认为c-expression和c ++ - expression之间存在差异.有人可以解释L值和R值吗?
编辑:此答案对于更新的问题不正确,它适用于最初声明的问题.
(i++)++不应该使用gcc或g ++,无论他们是否在两种语言中将文件解析为C或C++,后缀增量都需要左值作为操作数,结果是rvalue.
(注意,rvalue仅在C++中正式使用.在C中,表达式的结果要么是显式的左值,要么它们不是左值.术语rvalue根本不用于C标准的规范性文本中.)
简单地说,左值是指一个对象的表达式,即概念上某个地方的存储区域.可修改的左值是指定给它的有效值,因此可以出现在赋值表达式的左侧.
一个右值只是一个值,东西,你可以指定一个修改的左值从,而不是东西,你可以分配给.它只能出现在赋值表达式的右侧.
g++给我错误:lvalue required as increment operand.
前缀增量(和减量)略有不同.在C++中,前缀增量的结果显式为左值(5.3.2/1 [expr.pre.incr]); 在C中它明确地不是左值(6.5.3.1表示++ E等价于(E + = 1); 6.5.16表示任何赋值的结果不是左值).
(++i)++因此,仅在C++中语义正确,但它具有未定义的行为,因为您将值存储两次而没有插入序列点.
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |