整数变量上的双倍增量,它是否按预期工作

Double increment on an integer variable, does it work as intended?

本文关键字:是否 工作 变量 整数      更新时间:2023-10-16

我有一些代码,其中的行可以增加计数器。

++ count;

有时我有一个 if 条件,这意味着我应该将计数增加 2。

count += 2;

"双倍增量"的工作方式是否相同?

++ ++ count;

了解 C 和 C++ 编译器是否以相同的方式解释这一点会很有帮助。

由于这显然在语法上是正确的,剩下的问题是:"这个 UB 是因为未排序的写入吗?

它不是(在 C++11 及更高版本中),因为

5) 内置的预递增和预递减运算符的副作用在其值计算之前先排序(由于定义为复合赋值而隐式规则)

(从这里开始)

因此,代码从 C++11 开始就很好了。

但是,在此之前的排序规则是不同的,在C++11之前,代码实际上有UB。

在 C 语言中,该代码甚至无法编译。

事实上,C和C++之间甚至不同C++标准之间的行为不同,并且首先会出现这个问题,这一事实暗示了简单count += 2;是更安全,更具可读性的版本。你应该更喜欢它而不是"可爱而聪明"的++ ++count;

有两种方法。一个显然有效的,你必须在StackOverflow上提出一个问题。有评论说"在 11 C++或更晚"......您如何确定您的 C++ 代码以 C++ 11 而不是旧版本运行?即使您使用的扩展不属于早期语言,您的语言也可能是 C++0x,并且带有某些扩展。

显然,您不应该关心第二种方法是否有效,而是使用明显有效的方法。