【发布时间】:2018-07-18 01:42:25
【问题描述】:
考虑一下这个sn-p:
#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});
}
如果你运行它,你可以看到f(int) 重载是首选,即使std::vector 有一个std::initializer_list constructor(参见#8)。
问题:为什么首选将{42} 转换为int(而不是转换为std::vector,因为{42} 是std::initializer_list)?
【问题讨论】:
-
这被标记为 [c++11] 但链接的 Coliru 是用
-std=c++17编译的。虽然不影响问题,但不一致感觉不对。 -
{42}不是std::initializer_list。它是大括号中的int。它不是表达式,也没有类型。 -
@NickyC 修改
标签: c++ c++11 initializer-list overload-resolution