是* a ++ = * b ++ = 0安全吗?

时间:2013-07-03 00:23:47

标签: c

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

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

一些解释:

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

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

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

  4. 安全表示行为已明确定义。 (希望是:0分配给*a*b,然后ab都会增加一次。)

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

1 个答案:

答案 0 :(得分:5)

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