Конструктор и анонимный союз с постоянными членами - PullRequest
5 голосов
/ 01 июля 2011

Возможно ли иметь анонимный союз с постоянными членами?У меня есть следующее:

struct Bar {
  union {
    struct { const int x, y; };
    const int xy[2];
  };
  Bar() : x(1), y(2) {}
};

С G ++ 4.5 я получаю ошибку:

error: uninitialized member ‘Bar::<anonymous union>::xy’ with ‘const’ type ‘const int [2]’

Ответы [ 3 ]

3 голосов
/ 06 марта 2012

Это была проблема в GCC, которая была исправлена ​​в версии 4.6.Теперь ваш код работает нормально.

Он по-прежнему зависит от расширения GCC, поскольку использует анонимную структуру, но большинство компиляторов поддерживают их сейчас.Кроме того, следующий код теперь собирается правильно с -pedantic:

struct Bar {
  union {
    const int x;
    const int y;
  };
  Bar() : x(1) {}
};

Этот код также принимается Clang и Visual Studio 2010 (но не работает с 2008).

0 голосов
/ 03 июля 2011

Нет. Попробуйте использовать GCC's -pedantic switch:

  warning: ISO C++ prohibits anonymous structs

Таким образом, данный пример также является недопустимым с удаленными const s.

0 голосов
/ 01 июля 2011

Да. Это возможно, но вы должны инициализировать его, когда он создан. Вы не можете оставить это неинициализированным. Но в данном конкретном случае я не думаю, что это возможно, поскольку вы не можете инициализировать массив в списке инициализации.

Кстати, взгляните на эту интересную тему:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...