-14

我知道*a++ = *b++是安全且常用的。但是这种变体在 C、C++ 中也安全吗?

*a++ = *b++ = 0;

一些解释:

  1. 假设ab都是int *变量,而不是函数调用或宏。

  2. 假设ab是不同的变量。

  3. 假设ab不是volatile。(但如果你真的知道这里发生了什么,你应该知道volatile案例中的答案。)

  4. 安全意味着行为是明确定义的。(希望是: 0 分配给两者*a*b,然后两者ab都增加一次。)

如果可能,请提供一些权威信息(如相关规范)的链接。

4

1 回答 1

5

在 C 和 C++ 中,您需要考虑 的可能性a == b,这肯定会使其不安全。而在 C++ 中,您还需要排除ab引用相同名称的可能性,即至少有一个是引用。但除此之外,假设*a*b本身是有效的,是的,每个对象都被评估和分配一次。

于 2013-07-03T00:28:30.143 回答