2013-12-16 6 views
2

С C++ 11 появился новый способ инициализации и объявления переменных.C++ 11 Инициализация и декларация переменных

Оригинал

int c_derived = 0; 

C++ 11

int modern{0}; 

Каковы плюсы и минусы каждого метода, если таковые имеются? Зачем внедрять новый метод? Компилятор делает что-то другое?

+0

Новая функция C++ 11 может сбивать с толку, поскольку она похожа на объявление функции! –

+0

Я думаю, вы хотели сказать 'int modern {0};' – mpark

+1

Это существовало pre-C++ 11. Добавлены фигурные скобки. – chris

ответ

5

Вы ошибаетесь - форма int modern(0) (с круглыми скобками) была доступна в старых версиях C++ и по-прежнему доступна на C++ 11.

В C++ 11, новая форма использует фигурные скобки, чтобы обеспечить равномерное инициализацию, так что вы говорите

int modern{0}; 

Основное преимущество этой новой формы является то, что она может быть последовательно использоваться везде. Это дает понять, что вы инициализируете новый объект, а не вызываете функцию или, что еще хуже, declaring one.

Она также обеспечивает синтаксический согласованность с C-стиле («агрегат») STRUCT инициализации формы

struct A 
{ 
    int a; int b; 
}; 

A a = { 1, 2 }; 

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

+0

Хорошо. Книга, которую я читал, использовала вместо() вместо {}. Является ли это скорее личным предпочтением или будет int A = 1; устаревать в будущем? Должен ли я переключиться на новый метод? – Crysis

+1

Я так не думаю. Я думаю, что самое значительное преимущество C++ 11 brace-init - это способность, которая может вызвать конструктор по умолчанию. http://www.informit.com/articles/article.aspx?p=1852519 Итак, инициализация фундаментальных типов использует знак равенства (=), который никогда не будет устаревать. – hyun

+0

Хорошая точка ..... – Crysis

0

Использование фигурных скобок было попыткой ввести универсальную инициализацию в C++ 11.

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

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