在我看来,我应该重新提出我的问题。当编译器进行优化时,这两个实现之间有什么区别吗?
对此感到抱歉。我确实理解封装的重要性,这不是我所要求的。
class A
{
public:
int get_data{return m_data;}
private:
int m_data;
}
class B
{
public:
int get_data{return m_data;}
private:
volatile int m_data;
}
答案 0 :(得分:3)
没有。函数调用并不意味着无法重新排序或优化对此变量的访问。它可以进行优化和重新排序,大多数编译器可能会执行这样的优化。
答案 1 :(得分:1)
我想知道是否通过getter访问数据成员与将其公开并声明为volatile一样?
没有。顺便说一句,在C和C ++中正确使用volatile是如此罕见,以至于我不知道你是否错了并认为它与线程有关,它还没有。
答案 2 :(得分:0)
易失性主要用在与内存映射IO等交互的代码中。 它可以防止编译器进行大多数优化,因此可以在多线程代码中导致所需的行为,但它的目的是装饰编译器一无所知的内存。
Here是Herb Sutter关于此主题的文章。
答案 3 :(得分:0)
吸气剂的原因是关于封装的老故事。 Why use getters and setters?
无论您使用什么关键字,如果您不使用getter
,封装规则将被破坏正如其他人所指出的那样,不稳定并不能达到你的想象。