c++ - second - pair c plus plus
Utilidad de std:: make_pair y std:: make_tuple en C++ 1z (1)
En C ++ 1z, ¿existe alguna situación en la que sea beneficioso usar
std::make_pair
ystd::make_tuple
lugar de usar los constructores destd::pair
ystd::tuple
?
Siempre hay excepciones divertidas a cada regla. ¿Qué quieres que pase con std::reference_wrapper
?
int i = 42;
auto r = std::ref(i);
pair p(i, r); // std::pair<int, std::reference_wrapper<int> >
auto q = std::make_pair(i,r); // std::pair<int, int&>
Si quieres lo último, std::make_pair
es lo que quieres.
Además, dado que std::make_pair
es una plantilla de función, puede pasarla a otra plantilla de función que tal vez quiera hacer algo:
foo(std::make_pair<int, int>);
Esto no parece ser muy útil, pero alguien en algún lugar lo está utilizando para resolver un problema, y no puede pasar std::pair
allí.
A mi entender, la única razón de la existencia de std::make_pair
y std::make_tuple
es que no tiene que escribir los tipos por sí mismo, ya que se deducen automáticamente. En C ++ 1z, tenemos una deducción de argumentos de plantilla para las plantillas de clase , lo que nos permite simplemente escribir
std::pair p(1, 2.5); // C++1z
en lugar de
auto p = std::make_pair(1, 2.5); // C++11/14
La situación para std::tuple
es análoga. Esto conduce a la siguiente pregunta: En C ++ 1z, ¿existe alguna situación en la que sea beneficioso usar std::make_pair
y std::make_tuple
lugar de usar los constructores de std::pair
y std::tuple
?
Por favor, considere solo el código C ++ 1z puro (es decir, no es necesario que sea compatible con C ++ 14) y suponga que todos están familiarizados con esta característica de C ++ 1z.