следующий код:
#include <iostream>
class Bar
{
public:
void test();
};
class Foo
{
public:
void test() volatile { x.test(); }
private:
Bar x;
};
int main()
{
Foo foo;
foo.test();
return 0;
}
Вызывает ошибку при компиляции с gcc:
main.cpp: In member function 'void Foo::test() volatile':
main.cpp:14:33: error: no matching function for call to 'Bar::test() volatile'
main.cpp:7:8: note: candidate is: void Bar::test() <near match>
И поскольку экземпляр volatile
не может вызвать метод non-volatile
, мы можем предположить, что да, x
и y
будут volatile
в методе, даже если экземпляр MyClass
не объявлено volatile
.
Примечание: вы можете удалить квалификатор volatile
, используя const_cast<>
, если вам когда-либо понадобится; однако будьте осторожны, потому что, как и const
, в некоторых случаях это может привести к неопределенному поведению.