我知道*a++ = *b++
是安全且常用的。但这种变体在C,C ++中也是安全的吗?
*a++ = *b++ = 0;
一些解释:
假设a
和b
都是int *
变量,而不是函数调用或宏。
假设a
和b
是不同的变量。
假设a
和b
不是volatile
。 (但如果你真的知道这里发生了什么,你应该知道volatile
案件中的答案。)
安全表示行为已明确定义。 (希望是:0分配给*a
和*b
,然后a
和b
都会增加一次。)
如果可能,请提供一些权威信息(如相关规范)的链接。
答案 0 :(得分:5)
在C和C ++中,您需要考虑a == b
的可能性,这肯定会使其不安全。在C ++中,您还需要排除a
和b
引用相同名称的可能性,即至少有一个是引用。但排除这一点,假设*a
和*b
本身有效,是的,每个对象都会被评估并分配一次。