C++, volatile и strict aliasing rules

212
29 сентября 2021, 12:10

Подскажите, пожалуйста, законно ли использование спецификатора volatile для локального обхода требований строгих псевдонимов?

Например:

void do_something(volatile void* const _data)
{
    volatile A* const a = (volatile A* const)(_data);
    // Что-то делаем с содержимым памяти через представление a.
    volatile B* const b = (volatile B* const)(_data);
    // Что-то делаем с содержимым памяти через представление b.
    // Снова что-то делаем с содержимым памяти через a и b.
}

Я подозреваю, что volatile не предназначен для этого, но полной уверенности у меня нет.

Answer 1
  1. reinterpret_cast не может использоваться для избавления от volatile квалификатора (для этого нужен const_cast)
  2. Требования для алиасинга устанавливаются для действия доступа к объекту, а путь получения ссылки или указателя на него для осуществления доcтупа на эти требования никак не влияет.
Answer 2

Нет конечно, volatile не имеет никакого отношения к правилам aliasing'а.

READ ALSO
Логирование в консоль Catch2

Логирование в консоль Catch2

Почему Catch2 не логирует сообщения? В пустом TEST_CASE пишу INFO("42");После запуска в консоли получаю:

173
SVG маска и анимация при наведении

SVG маска и анимация при наведении

Я не очень хорошо знаком с SVG и маской, и я хотел бы знать, возможно ли, чтобы анимация, как на картинке, была бы при наведении мыши? (с JQuery или...

85
Запуск js из другого js

Запуск js из другого js

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

151
Кнопка раскрытия карты Яндекс за пределами элемента карты

Кнопка раскрытия карты Яндекс за пределами элемента карты

Нужно сделать стандартную кнопку раскрытия карты на весь экран, которая итак идет из коробки

148