2015-09-06 33 views
1

语法的调用是什么,它有什么作用?对于哪个C++标准呢?C++新的语法,请解释

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。在这种特殊情况下,构造使用普通指针初始化共享指针,并将新分配的整数设置为10(demo)。

的效果是相同的,如下面的代码片断:

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

对于该C++标准它是什么?

此语法是在C++ 11中引入的。

+0

感谢您的回答!所以,如果它等于'shared_ptr p(new int(10));',这个语法是什么? – Qwertypal

+0

@Qwertypal这个新的语法更具有限制性。例如,如果使用不适合在'int',这样,一个'长long'不变'诠释一个(123456789098876543LL);'您的变量'了'会得到一个负数后截断([DEMO]( http://ideone.com/O3kG3h))。如果你用'{...}'尝试同样的事情,你会得到一个编译时错误([demo](http://ideone.com/71zbpI))。 – dasblinkenlight