c++ - 在 C++ 中,"访问"在严格别名规则中的意义是什么?

  显示原文与译文双语对照的内容
88 3

3 。10/10表示:

但是,"访问"这个术语在任何地方都没有定义。 在这种情况下,它是指读取读取读取还是修改?

在C 标准中,它被明确定义为读或者修改 。 但是在C++11中,它似乎在不同的时间使用不同的含义,例如:

1.9/8:

严格按照抽象机器的规则对volatile对象的访问进行严格评估。

显然,这意味着要在/24./等许多其他地方阅读或者修改

  • 访问或者修改可变对象,或者

它被用来当作是只读的意思,读。

时间: 原作者:

79 0

它必须意味着读和写,或者规则并不意味着。 请考虑来自 http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html的示例:


float *P;


void zero_array() {


 int i;


 for (i = 0; i <10000; ++i)


 P[i] = 0.0f;


}



只有编译器可以假定任何别名 P 都不存在时,才可以将示例代码 上面 优化为。 如果是这样的情况,那么在不允许的情况下,只从不允许的glvalue读取,那么 上面 代码就不会调用 UB,即使是某些 iP[i] 别名 PP = (float *) &P; 由于所有读都是完全合法的,所以它们都使用左值表达式。

编辑: CWG问题 1531 直接在点上。 这个问题被移到 2013年04月 博士的( 缺陷报告) 状态,但是解决方案,无论原因,不应用于工作纸。

原作者:
...