Прозрачная замена отключена путем промежуточного создания объектов: союзы сломаны?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Прозрачная замена отключена путем промежуточного создания объектов: союзы сломаны?

Сообщение Anonymous »

Обратите внимание, что это вопрос с тегом языка, который означает правила и формулировку стандарта C ++, а не практических, реальных вариантов использования (мне известно о преимуществах std :: variant). Тем не менее, рекомендации о том, как решить эту конкретную проблему на практике. /> Значит ли это, что замена объекта через размещение новое только работает, как и ожидалось, когда нет другого размещения нового типа, используя одно и то же место перед ним? < /p>

Код: Выделить всё

int i = 0;
new (&i) float(3.5); // reuses storage
new (&i) int(5); // transparent replacement does not apply?
int j = i + 1; // ==6? UB?
В этом фрагменте [basic.life]/10 не применяется к строке 3, потому что это новое размещение не происходит до того, как я не будет повторно использован? Нет безопасного общего способа переключения активного члена профсоюза: < /p>

Код: Выделить всё

union U{int i; float f;};
U u = {5}; // i is active
// option 1:
u.f = 2.5; // assignment implicitly creates object for union members
u.i = 7;
// option 2:
new(&u.f) float(2.5);
new(&u.i) int(7);
// afterwards
//Can I use u.i here?
Даже если мы предположим, что вариант 1 не составляет «повторное использование хранилища» в смысле [basic.life]/10, этот вариант неявно создает объекты, когда вовлеченные типы имеют тривиальные или встроенные операторы задания (и ctors), в противном случае стандарт относится к необходимости. общее решение. Тем не менее, вариант 2 страдает от проблемы, описанной в начале, означает, что оба варианта, возможно, являются недействительными.
Однако эта интерпретация сделает невозможным ever переключаться между различными активными членами, что не может быть намерением. Повторное использование, потому что указатель перешел в новое размещение, отличается для каждого участника, даже если у них один и тот же адрес?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ons-broken
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Прозрачная замена отключена путем промежуточного создания объектов: союзы сломаны?
    Anonymous » » в форуме C++
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Когда кнопка отключена, ее прозрачная функция исчезает WPF
    Гость » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Гость
  • Laravel: замена параметров промежуточного программного обеспечения во вложенных маршрутах
    Anonymous » » в форуме Php
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Laravel: замена параметров промежуточного программного обеспечения во вложенных маршрутах
    Anonymous » » в форуме Php
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Я случайно запустил «chown root:root -R /», тома докера сломаны
    Anonymous » » в форуме Linux
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»