2015-09-06 3 views
1

Что такое синтаксис и что он делает? Для чего это стандарт C++?C++ новый синтаксис, объясняет PLS

shared_ptr<int> p{new int{10}}; 

Я смущен о первом наборе фигурных скобок {}. Полагаю, второй набор создает временный объект из 10 элементов?

+0

Он создает 1 int в куче со значением 10, я думаю, затем сохраняет его в shared_ptr – paulm

+3

. Читайте об [равносильном синтаксисе инициализации] (http://www.stroustrup.com/C++11FAQ.html# равномерный-INIT). –

+3

это было бы лучше выражено как 'auto p = make_shared (10);' – sp2danny

ответ

5

Что такое синтаксис и что он делает?

Этот синтаксис называется равномерными инициализациями или списка инициализации. Он делает много разных вещей explained here. В этом конкретном случае конструкция инициализирует общий указатель с простым указателем на целое число и устанавливает новое выделенное целое число в десять (demo).

Эффект такой же, как в фрагменте кода ниже:

int *tmp = new int; 
*tmp = 10; 
shared_ptr p(tmp); 

За что C++ стандарт это?

Этот синтаксис был введен в C++ 11.

+0

Спасибо за ответ! Итак, если это эквивалентно 'shared_ptr p (new int (10));', для чего этот синтаксис? – Qwertypal

+0

@Qwertypal Этот новый синтаксис более ограничительный. Например, если вы используете константу 'long long', которая не вписывается в' int', как это, 'int a (123456789098876543LL);' ваша переменная 'a' получит отрицательное число после усечения ([demo] (http://ideone.com/O3kG3h)). Если вы попытаетесь сделать то же самое с '{...}', вы получите ошибку времени компиляции ([demo] (http://ideone.com/71zbpI)). – dasblinkenlight

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