gpt4 book ai didi

c++ - c表达式和c++表达式的区别

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:48 25 4
gpt4 key购买 nike

int main()
{
int i=3;
(++i)++;
printf("%d",i);
}

此程序适用于 g++ 编译器,但不适用于 gcc。如果我写 i++++ 或++i++ 它在 cpp 中也不起作用。我认为 c-expression 和 c++-expression 是有区别的。有人可以解释一下 L 值和 R 值吗?

最佳答案

编辑:这个答案对于更新后的问题是不正确的,它适用于最初陈述的问题。

(i++)++ 不应该与 gcc 或 g++ 一起工作,无论它们是否在两种语言中将文件解析为 C 或 C++ 后缀增量需要一个左值 作为操作数,结果是一个右值

(请注意,右值 仅在 C++ 中正式使用。在 C 中,表达式的结果要么是明确的左值,要么只是不是左值。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++ 中在语义上是正确的,但是它具有未定义的行为,因为您将一个值存储到一个对象两次而没有一个介入的序列点

关于c++ - c表达式和c++表达式的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com