考虑以下片段:
#include <iostream>
#include <vector>
void f(std::vector<int>){std::cout << __PRETTY_FUNCTION__ << '\n';}
void f(int x){std::cout << __PRETTY_FUNCTION__ << '\n';}
int main()
{
f({42});
}
在 Coliru 上实时运行,你会发现即使 std::vector
有一个std::initializer_list
构造函数(参见#8),f(int)
重载也更被优先使用。
问题:为什么将 {42}
转换为 int
更优先(而不是转换为 std::vector
,因为 {42}
是 std::initializer_list
)?
-std=c++17
编译的。这种不一致感觉不太对,尽管它不会影响问题。 - user2486888{42}
不是一个std::initializer_list
,它是用花括号括起来的一个int
。它不是一个表达式,也没有类型。 - M.M