在遍历列表初始化的各种规则时,我在dcl.init.list#3.6中找到了它:
否则,如果T是的特化形式
std::initializer_list<E>
,则对象的构造如下所述。
在另一方面,在故事大纲std::initializer_list
,在support.initlist,我发现了以下声明:
如果声明了的显式专门化或部分专门化
initializer_list
,则程序格式错误。
这些似乎是矛盾的说法,那么我有什么误解?
“模板专业化”具有两个不同的含义:
“显式(完全)专业化”或“部分专业化”-一种语言构造,可为模板参数的某种组合更改模板的含义。
通过将模板参数替换为模板而从模板生成的内容。
换句话说,如果您为模板指定模板参数,则生成的type / function / variable / ...是该模板的特殊化。例如,std::vector<int>
是专业化的std::vector
。
好像您引用的第一段使用(2)。
因此,“如果T
是一个专业化std::initializer_list<E>
”大致意思是“如果存在这样E
认为std::is_same_v<T, std::initializer_list<E>>
”,或者“如果T
是一个std::initializer_list<E>
”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句