2013-12-05 4 views
0

Я видел синтаксис инициализации, который является новым для меня. Я искал в Google и здесь, но я не мог найти что-то полезное.C++: переменная инициализация с использованием x {0}

int a = 0; 
int a = {0}; 
int a{0}; // <- this is new for me  

Для чего нужен третий стиль, в то время как другие существуют? В чем разница между ними точно?

Спасибо.

+2

Третий решает, что Скотт Мейерс назвал «самым неприятным анализом C++». При определенных обстоятельствах 'int a (var)' может быть неверно истолковано как объявление функции, а не строить переменную. http://en.wikipedia.org/wiki/Most_vexing_parse –

ответ

4

Возможно, вас заинтересует C++11 initializer lists. Они могут не объяснить третий пример, но они полезны, особенно для реальных объектов класса.

Ваш код int a{0}; называется uniform initialization в C++ 11. См. Также most vexing parse wikipage (комментирует Joe Z).

Найдите время, по крайней мере, прочитайте C++11 wikipage. Новые возможности C++ 11 делают его практически другим языком, чем C++ 03.

2

Эта форма инициализации называется инициализацией списка в C++ 11.

При использовании с переменными встроенного типа инициализация списка отличается одним способом: вы не можете перечислить инициализацию переменных встроенного типа, если инициализатор может привести к потере информации.

double pi = 3.1415926; 
int a(pi); //fine 
int a{pi}; //compile error 
Смежные вопросы