Как они связаны? Использование конструктора списка инициализаторов не работает для пары, поскольку pair
гетерогенно типизирован, в то время как конструктор списка инициализаторов использует initializer_list<T>
, который можно использовать только для получения списка инициализатора гомогенизированного типа.
(Глядя в спецификацию, его действительно следует называть «конструктор списка инициализаторов», а не «конструктор списка инициализаторов». Вы действительно хотите сослаться на первый? Если нет, на что вы ссылаетесь?).
Если вы просто ссылаетесь на инициализацию std::pair<>
с использованием списка инициализаторов вместо использования std::make_pair
и auto
, я думаю, что оба в порядке.
auto p = std::make_pair(a, b);
std::pair<A, B> p{a, b};
Если у вас уже есть типы A
и B
и вы можете использовать их для pair
, тогда список инициализаторов - хороший способ использования. Если нет, то make_pair
может быть хорошей вещью. Если у вас есть типы A
и B
, но вы не уверены, правильно ли они уже преобразованы (т. Е. Они не должны быть массивами или типами функций, и вы, вероятно, также хотите, чтобы они были не ссылочными типами), тогда может быть проще использовать std::make_pair
, который будет правильно определять тип выражений.