§[dcl.init.list] 8.5.4/2:
如果在使用
std::initializer_list
之前没有包含头文件<initializer_list>
,即使是隐式使用而未命名类型(7.1.6.4),模板std :: initializer_list
未定义。这意味着这个程序是不合规的。
这是否意味着这个程序不合规?
#include <vector>
int main() {
// uses vector::vector(initializer_list<T>, const Allocator&) constructor
std::vector<int> v = {1, 2, 3};
}
std::vector
构造函数使用initializer_list
,所以必须在<vector>
中包含它。但是除非有声明这种依赖关系的地方,否则正式的代码可能会出现错误。原因是标准库允许进行任何类型的魔法操作,包括依赖于编译器的非标准行为,因此不能推断标准库必须以与自己的代码相同的方式实现。 - Cheers and hth. - Alf