在这样的代码中:
#include <iostream>
#include <initializer_list>
#include <string>
struct A
{
A() { std::cout << "2" << std::endl; }
A(int a) { std::cout << "0" << std::endl; }
A(std::initializer_list<std::string> s) { std::cout << "3" << std::endl; }
A(std::initializer_list<int> l) { std::cout << "1" << std::endl; }
};
int main()
{
A a1{{}};
}
为什么它调用std::initializer_list<int>
构造函数的规范?如果我们定义例如构造函数,它将产生歧义编译错误std::initializer_list<double>
。这种构造的规则是什么,为什么std::initializer_list
用数字作为模板参数如此具体?