成员函数是不稳定的是什么意思?

0x4*_*2D2 10 c++

我通常会看到const 用于表示const成员函数的说明符.但是当使用volatile关键字时它意味着什么?

void f() volatile {}
Run Code Online (Sandbox Code Playgroud)

这对我来说很好,但我不明白这是什么.我在搜索中找不到任何关于此的信息,所以任何帮助都表示赞赏.

更新:为了说清楚,我知道它volatile是为了什么.我只是不知道在这种情况下它意味着什么.

Man*_*rse 14

volatile上一个成员函数限定符是类似于const限定符.它允许在volatile对象上调用成员函数:

struct A {
    void f() volatile {}
    void g() {}
};

int main() {
    A volatile a;
    a.f(); // Allowed
    a.g(); // Doesn't compile
}
Run Code Online (Sandbox Code Playgroud)

  • volatile对象意味着什么?[可以换?] (2认同)
  • `volatile`表示可以通过编译器未知的内容(例如内存映射硬件)访问该值,并禁用某些优化.出于as-if规则的目的,访问`volatile`值被视为副作用. (2认同)

Jon*_*rdy 9

在成员函数constvolatile限定符适用于*this.然后将volatile访问该成员函数中的任何实例成员的访问,其语义与任何volatile变量相同.特别是,volatile不能在volatile对象上调用非成员函数,并volatile以与以下相同的方式应用于重载const:

#include <iostream>

class C {
public:

    void f() {
        std::cout << "f()\n";
    }

    void f() const {
        std::cout << "f() const\n";
    }

    void f() volatile {
        std::cout << "f() volatile\n";
    }

    void f() const volatile {
        std::cout << "f() const volatile\n";
    }

};

int main() {

    C c1;
    c1.f();

    const C c2;
    c2.f();

    volatile C c3;
    c3.f();

    const volatile C c4;
    c4.f();

}
Run Code Online (Sandbox Code Playgroud)

  • @Dineshkumar:这实际上是[标准中的错误](http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253),它已在C++ 11中修复并更改因此在GCC 4.6中. (2认同)