Разница между std:: pair и std:: tuple только с двумя членами?


есть ли разница между std::pair и std::tuple только с двумя членами? (Кроме того, очевидно, что std::pair требуются два и только два члена и tuple может быть меньше...)

4 57

4 ответа:

есть некоторые различия:

  1. std::tuple не может быть стандартные-макета (по крайней мере, это не требуются быть по стандарту). Каждый std::pair<T, Y> является стандартным макетом, если оба T и Y стандартные-макета.

  2. это немного легче получить содержимое pair чем a tuple. Вы должны использовать вызов функции в tuple корпус pair case-это просто член поле.

но это все.

это очень поздний ответ, но обратите внимание, что, потому что std::pair определяется с помощью переменных-членов, его размер не может быть оптимизирован с помощью оптимизация пустого базового класса (first и second должны занимать разные адреса, даже если один или оба являются пустым классом). Это усугубляется любыми требованиями выравнивания second_type, Так что в худшем случае в результате std::pair будет в основном в два раза больше, чем нужно.

std::tuple разрешает доступ только через хелпера функции, поэтому он может быть получен из любого типа, если один или другой пуст, экономя на накладных расходах. Реализация GCC, по крайней мере, определенно делает это...вы можете ткнуть через заголовки, чтобы проверить это, но там же этой в качестве доказательства.

An std::tuple's имя длиннее (один дополнительный символ). Больше этих символов набирается правой рукой,поэтому большинству людей легче печатать.

что сказал:std::pair может иметь только два значения - не ноль, один, три или более. два значения. Кортеж, однако, почти не имеет семантических ограничений на количество значений. Ан std::pair, таким образом, является более точным, безопасным типом для использования, если вы действительно хотите указать пару значений.

для чего это стоит, я считаю, что выход GDB std:: tuple гораздо сложнее читать. Очевидно, что если вам нужно более 2 значений, то std::pair не будет работать, но я считаю это точкой в пользу структур.