【问题标题】:Increment order [duplicate]递增顺序[重复]
【发布时间】:2019-03-21 15:43:22
【问题描述】:

我在理解 C++ 中的递增顺序时遇到了问题。

我知道增量是一元运算符,因此它们在括号之后从右到左。

我的问题是我们什么时候增加数量?

这是一个简单的代码:

#include <iostream>
using namespace std;

int main()
{
  int a1;
  int a(12),b(3);

  a1=7+10%3-5;
  b=a/b++;

  cout<<a1<<"\t"<<b<<endl;
  return 0; 
}

在这里我得到 a=3 是对的,但是 b=5 ,我认为是 3,因为我们从右边开始并增加 1,然后 12/4 得到 3。

【问题讨论】:

  • b++ 在获得b 的值之后 递增。 ++b 会在获得b 的值之前增加
  • @UweKeim 我认为K&R 说b++ 在计算完成后增加b,而不是在获得b 的值之后。
  • 感谢您的澄清,@Ayxan ????.
  • @UweKeim 我重新检查了这本书,它说“但是表达式++n 增加了n 之前它的值被使用,而n++ 增加了n 在它的值被使用之后。”这意味着我错了。很抱歉造成混乱
  • n++n 的原始值,用于表达式的评估。我会避免说 statement,因为 x = 2 * 5 + (n++, n) 恢复了预增量行为,因为在这种情况下 n++ is 表达式。

标签: c++ increment


【解决方案1】:

注意C++语法暗示后缀自增的关联性是从左到右,而前缀自增的关联性是从右到左。

b = a / b++; 的行为实际上是未定义。这是因为=不是一个排序点,所以b上存在同时读写。

(同样适用于C。)

这是i = i++; 的一个变体:有关更多信息,请参阅Is the behaviour of i = i++ really undefined?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2023-01-18
    相关资源
    最近更新 更多