gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:20:32 25 4
gpt4 key购买 nike

3.10/10 说:

If a program attempts to access the stored value of an object through a glvalue of other than one of the following types the behavior is undefined:

但是,“访问”一词在任何地方都没有定义。在这种情况下,它是指读取,还是读取或修改


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

1.9/8:

Access to volatile objects are evaluated strictly according to the rules of the abstract machine.

显然这是为了阅读或修改,但是在许多其他地方,例如 1.10/24:

  • access or modify a volatile object, or

它的使用好像它只是意味着读取

最佳答案

它必须意味着读和写,否则规则意义不大。考虑 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;
}

上面的示例代码可以优化成memset仅当编译器可以假定 P[i] 中没有一个别名 P .但是考虑一个只有从不允许的glvalue中读取是UB的世界,那么即使P[i],上面的代码也不会调用UB。别名 P对于一些 i - 例如,如果有人这样做 P = (float *) &P; , 因为P 的所有读取完全合法 - 它们都使用左值表达式 P .


编辑:CWG issue 1531是直接点。该问题已于 2013 年 4 月转为 DR(缺陷报告)状态,但无论出于何种原因,该解决方案并未应用于工作文件。

关于c++ - 在 C++ 中, "access"在严格的别名规则中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29001319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com