std :: make_pair против унифицированного инициализатора C ++ 0x - PullRequest
5 голосов
/ 13 марта 2011

Есть ли недостаток в использовании последнего? std::make_pair более универсален / совместим или они действительно взаимозаменяемы?

Спасибо! * * 1004

1 Ответ

6 голосов
/ 13 марта 2011

Как они связаны? Использование конструктора списка инициализаторов не работает для пары, поскольку 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, который будет правильно определять тип выражений.

...