2015-10-17 6 views
8

Я прочитал this link из Страуструпа со следующим кодом:Делегирования конструкторов в 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}{}

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

+1

«Могу ли я использовать фигурные скобки в вызовах функций othere, или это просто в деле делегирования конструктора?» - Деление конструктора не является вызовом функции. Вы никогда не сможете использовать '{}' с вызовами функций. – emlai

+0

проверить это: http://stackoverflow.com/questions/18222926/why-is-list-initialization-using-curly-braces-better-than-the-alternatives –

ответ

7

() использует value initialization, если круглые скобки пусты или direct initialization, если они не пусты.

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

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

+0

Если я правильно понимаю, это означает, что я нажимаю 'X(): X (42) {} ', тогда я вызываю конструктор inte, но если я пишу' X(): X {42} {} ', то я просто инициализирую переменные memebr без вызова другого конструктора? – Govan

+0

@Govan - примитивные типы, такие как 'int' и' double', не являются полноценными объектами. У них нет конструкторов. –

+0

@DavidHammen Я имел в виду X (int constructor) не примитивный int constructior – Govan

0

Значения инициализации могут быть указаны с помощью скобок или скобок.

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^