clang — инициализация массива C ++ без конструкторов по умолчанию

У меня есть класс Thing не спортивный конструктор по умолчанию.

Теперь мы определим другой класс, который теперь должен инициализировать элементы массива сразу, так как без конструктора по умолчанию никакое позднее присваивание не может быть выполнено. Итак, мы имеем:

class TwoThings
{
public:

Thing things[2];

TwoThings() : things({Thing("thing 1"),Thing("thing 2")})
{
}
}

Это правильный путь?

GCC компилирует это нормально, в то время как Clang — нет, указав «список инициализаторов». Я пробовал несколько альтернативных способов, таких как двойные скобки {{ ... }} и такой, но не может получить компилирующий эквивалент для Clang.

Как инициализировать массивы без конструктора по умолчанию в Clang?

9

Решение

Да, инициализация массива члена в скобках является расширением GCC. Чтобы сделать его стандартным, вы можете просто использовать один набор скобок (требуется C ++ 11):

TwoThings() : things{Thing("thing 1"),Thing("thing 2")}
{
}

Если вы не можете использовать C ++ 11, вы можете использовать другой метод хранения, например std::pair<Thing,Thing> или же std::vector<Thing>,

9

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector