Что такое синтаксис и что он делает? Для чего это стандарт C++?C++ новый синтаксис, объясняет PLS
shared_ptr<int> p{new int{10}};
Я смущен о первом наборе фигурных скобок {}
. Полагаю, второй набор создает временный объект из 10 элементов?
Что такое синтаксис и что он делает? Для чего это стандарт C++?C++ новый синтаксис, объясняет PLS
shared_ptr<int> p{new int{10}};
Я смущен о первом наборе фигурных скобок {}
. Полагаю, второй набор создает временный объект из 10 элементов?
Что такое синтаксис и что он делает?
Этот синтаксис называется равномерными инициализациями или списка инициализации. Он делает много разных вещей explained here. В этом конкретном случае конструкция инициализирует общий указатель с простым указателем на целое число и устанавливает новое выделенное целое число в десять (demo).
Эффект такой же, как в фрагменте кода ниже:
int *tmp = new int;
*tmp = 10;
shared_ptr p(tmp);
За что C++ стандарт это?
Этот синтаксис был введен в C++ 11.
Спасибо за ответ! Итак, если это эквивалентно 'shared_ptr
@Qwertypal Этот новый синтаксис более ограничительный. Например, если вы используете константу 'long long', которая не вписывается в' int', как это, 'int a (123456789098876543LL);' ваша переменная 'a' получит отрицательное число после усечения ([demo] (http://ideone.com/O3kG3h)). Если вы попытаетесь сделать то же самое с '{...}', вы получите ошибку времени компиляции ([demo] (http://ideone.com/71zbpI)). – dasblinkenlight
Он создает 1 int в куче со значением 10, я думаю, затем сохраняет его в shared_ptr – paulm
. Читайте об [равносильном синтаксисе инициализации] (http://www.stroustrup.com/C++11FAQ.html# равномерный-INIT). –
это было бы лучше выражено как 'auto p = make_shared (10);' –
sp2danny