c ++ 11 — делегирование конструкторов в c ++ () или {}

Я читаю эта ссылка Страуструпа со следующим кодом:

class X {
int a;
public:
X(int x) { if (0<x && x<=max) a=x; else throw bad_X(x); }
X() :X{42} { }
X(string s) :X{lexical_cast<int>(s)} { }
// ...
};

Мой вопрос о линии:

X() X{42}{}

Есть ли различия между скобками и фигурными скобками?
Если нет различий, могу ли я использовать фигурные скобки и в других вызовах функций? Или это только в делегировании конструктора?
И наконец, почему у нас должен быть оба синтаксиса? Это немного неоднозначно.

11

Решение

() использования инициализация значения если круглые скобки пусты, или прямая инициализация если не пусто.

{} использования инициализация списка, что подразумевает инициализация значения если скобки пусты, или агрегатная инициализация если инициализированный объект является агрегатом.

Так как ваш X это простой intнет никакой разницы между инициализацией () или же {},

10

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

Значения инициализации могут быть указаны в скобках или фигурных скобках.

Инициализация фигурных скобок была введена в C ++ 11, и она подразумевает «равномерную инициализацию», которая может использоваться для всех нестатических переменных.

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

Это всего лишь синтаксическая конструкция, которая не приводит к повышению производительности или штрафам.

1

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