Рассмотрим этот фрагмент:
#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
(см. # 8).
Вопрос: Почему преобразование {42}
в int
предпочтительнее (вместо преобразования в std::vector
, поскольку {42}
является std::initializer_list
)?