我对volatile和mutable之间的区别有疑问.我注意到这两个都意味着它可以改变.还有什么?它们是一样的吗?有什么不同?它们适用于哪里?为什么提出这两个想法?如何以不同的方式使用它们?
非常感谢.
class MyClass
{
int x, y;
void foo() volatile {
// do stuff with x
// do stuff with y
}
};
Run Code Online (Sandbox Code Playgroud)
我是否需要声明x并将其y视为volatile或将成为volatile自动处理的所有成员变量?
我想确保"stuff with x"不会y被编译器的"stuff with " 重新排序.
编辑:如果我将正常类型转换为volatile类型会发生什么?这是否会指示编译器不重新排序对该位置的访问?我想在特殊情况下将一个普通变量传递给一个参数是volatile的函数.我必须确保编译器不会使用先前或后续的读写重新排序该调用.
我通常会看到const 用于表示const成员函数的说明符.但是当使用volatile关键字时它意味着什么?
void f() volatile {}
Run Code Online (Sandbox Code Playgroud)
这对我来说很好,但我不明白这是什么.我在搜索中找不到任何关于此的信息,所以任何帮助都表示赞赏.
更新:为了说清楚,我知道它volatile是为了什么.我只是不知道在这种情况下它意味着什么.
如果使用非volatile对象调用volatile成员函数会发生什么?
#include <iostream>
using namespace std;
class A
{
private:
int x;
public:
void func(int a) volatile //volatile function
{
x = a;
cout<<x<<endl;
}
};
int main()
{
A a1; // non volatile object
a1.func(10);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我碰到这个帖子这其中试图解释volatile成员函数和const volatile成员函数.最重要的回答者说
将成员函数标记为const或volatile(或组合的const volatile)将这些限定符应用于函数中使用的this指针
以上是什么意思?如何this将方法的限定符标记为volatile或const volatile会影响this指针?
我很困惑这对方法本身意味着什么
class foo
{
void someMethod() volatile
{std::cout << "volatile method" }
void otherMethod() const volatile
{std::cout << "const volatile method"}
};
Run Code Online (Sandbox Code Playgroud)