【发布时间】:2014-04-02 16:26:23
【问题描述】:
当我遇到这个问题时,我正在阅读我的教科书
- 以下表达式后面的 a 的值是多少?
假设 a = 5 的初始值。提到步骤- a+=(a++)+(++a)
起初我认为这是未定义的行为,因为 a 已被多次修改。
然后我读了这个问题,它说提及步骤,所以我可能认为这个问题是正确的。
所以我的问题是:
- 应用括号是否定义了未定义的行为?
- 在计算括号表达式后是否创建了序列点?
- 如果定义了,括号有什么关系,因为 ++ 和 () 具有相同的优先级
注意:解释清楚且清晰的答案将获得我的投票
【问题讨论】:
-
最好的办法是编写既可读又可维护的合理代码。因此,首先要避免这种思路。
-
您的教科书是否旨在教授“C/C++”?只是好奇。
-
@EdHeal 好吧,我同意你的看法。但这是我教科书中的一个问题,而且很多网站,如 this 都有这样的例子。
-
那个链接弄错了,Akshay。它的原因是,由于在应用于单个操作数时,前增量比后增量具有更高的优先级,因此当应用于不同的操作数时,它也会首先被评估。不过,这种推理是错误的。没有任何依据。
标签: c++ c expression undefined-behavior operator-precedence