Вариант использования C ++ 11 для кусок_конструкции пары и кортежа?

В N3059 я нашел описание кусочного построения пар (и кортежей) (и это есть в новом Стандарте).

Но я не вижу, когда я следует использовать это. Я нашел дискуссии о emplace и некопируемых объектах, но когда я попробовал это, я не смог создать случай, когда мне нужен piecewiese_construct или я мог бы увидеть повышение производительности.

Пример. Я думал, что мне нужен класс, который не копируется , но movebale (требуется для пересылки):

struct NoCopy {
  NoCopy(int, int) {};
  NoCopy(const NoCopy&) = delete; // no copy
  NoCopy& operator=(const NoCopy&) = delete; // no assign
  NoCopy(NoCopy&&) {}; // please move
  NoCopy& operator=(NoCopy&&) {}; // please move-assign
};

Я тогда вроде как ожидал, что стандартное построение пар не удастся:

pair x{ NoCopy{1,2}, NoCopy{2,3} }; // fine!

, но этого не произошло. На самом деле, это то, что я ожидал в любом случае, потому что «перемещать вещи», а не копировать их повсюду в stdlib, так и должно быть.

Таким образом, Я не вижу причин, почему мне следовало это сделать, или около того:

pair y(
    piecewise_construct,
    forward_as_tuple(1,2),
    forward_as_tuple(2,3)
); // also fine
  • Итак, что это за вариант использования ?
  • Как и когда мне использовать piecewise_construct ?

33
задан chema989 13 December 2016 в 16:43
поделиться