即,以大括号形式给某容器对象初始化,如下图所示:
这种形式的初始化之所以行得通,是因为C++11中的容器的构造函数允许接受一个初始化列表为参数,而不是说构造函数的初始化列表。
C++11还允许你使用大括号代替小括号对容器对象进行构造,如下图所示:
按照一般的C++语法规则来说应该是shared_ptr<double> pd (new double);才对。不过,这会与初始化列表模版混淆。C++11是这样处理的,如果你确实是直接用大括号来进行容器对象的构造,那它调用的就是接受初始化列表的构造函数,即,接受一个初始化列表作为参数。
这个初始化列表模版接受隐式类型转换,不过它的转换比较严格,即,列表中的实参本身可以是某种类型而没有精确度的损失,当然,这是我的理解。如下图所示:
像这个5.5本身就不是整形,它就不能被转换成整形,就会造成编译错误。
这个初始化列表模版主要用于处理大小不定的参数序列,把这个序列作为整体传参,除此之外没啥用。它也可以被看做是容器,也有begin和end,此外还要#include <initializer_list>。
此外,initializer_list允许你整个赋值,但不允许你更改其中的某个元素。如下图所示:
如图所示,d1的第一个元素不能被更改,但是d1作为一个整体可以被整体更改,赋值。