C++ 结构体/类中的非静态成员变量是否需要标记为 volatile 才能在成员函数中被视为 volatile?

2023-12-22

class MyClass
{
    int x, y;
    void foo() volatile {
        // do stuff with x
        // do stuff with y
    }   
};

我需要声明吗x and y as volatile或者将所有成员变量视为volatile自动地?

我想确保“与x” 没有重新排序为“东西y”由编译器。

编辑: 如果我将普通类型转换为volatile类型?这是否会指示编译器不要重新排序对该位置的访问?我想将特殊情况下的普通变量传递给参数易失的函数。我必须确保编译器不会通过之前或之后的读取和写入重新排序该调用。


标记成员函数volatile就像标记它一样const;这意味着接收者对象被视为被声明为volatile T*。因此,任何引用x or y将被视为volatile读入成员函数。此外,一个volatile对象只能调用volatile成员函数。

也就是说,您可能想要标记x and y volatile无论如何,如果您确实希望将所有对它们的访问视为volatile.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 结构体/类中的非静态成员变量是否需要标记为 volatile 才能在成员函数中被视为 volatile? 的相关文章

随机推荐