Какова цель изменчивой функции-члена в C ++? - PullRequest
21 голосов
/ 15 марта 2010

Какова цель функции-члена volatile в C ++?

Ответы [ 2 ]

23 голосов
/ 15 марта 2010

Чтобы ответить на вопрос о том, что значит иметь «изменчивую функцию-член» (которая может быть, а может и не быть той, которая была изначально предназначена человеком, который задал вопрос), помечая функцию-член как const или volatile (или комбинированный const volatile) применяет эти квалификаторы к указателю this, используемому в функции. Как указано в стандарте (9.2.1 «Указатель this»):

Тип этого в функции-члене class X: X*. Если функция-член объявлена ​​const, типом этого является const X*, если функция-член объявлена ​​volatile, типом this является volatile X*, и если функция-член объявлена ​​const volatile тип этого const volatile X*.

Таким образом, пометив функцию-член как volatile, вы получите любой доступ к элементам нестатических данных объекта в этой функции-члену как volatile.

6 голосов
/ 15 марта 2010

EDIT:

Этот ответ был опубликован, когда вопрос касался ключевого слова volatile. Вопрос, похоже, был изменен третьей стороной.

ОРИГИНАЛ:

Volatile сообщает компилятору, что он не должен предполагать, что значение, которое он только что поместил в переменную, помеченную как volatile, будет там при следующем его использовании ... что он должен проверить текущее значение, прежде чем использовать его снова.

Один пример, если переменная представляет область памяти, которая может быть изменена другим процессом.

Вот пример (давным-давно, с тех пор, как я сделал C ++, поэтому, пожалуйста, простите за любые незначительные синтаксические проблемы):

volatile int x;

int DoSomething()
{
    x = 1;

    DoSomeOtherStuff();

    return x+1; // Don't just return 2 because we stored a 1 in x.  
                // Check to get its current value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...