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_pairystd::make_tuplelugar de usar los constructores destd::pairystd::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.