std:: piecewise_construct, std:: piecewise_construct_t
From cppreference.net
C++
Utilities library
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
std::pair
| Member functions | ||||
|
(C++11)
|
||||
| Non-member functions | ||||
|
(until C++20)
(until C++20)
(until C++20)
(until C++20)
(until C++20)
(C++20)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
| Helper classes | ||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
piecewise_construct_t
(C++11)
|
||||
| Deduction guides (C++17) |
|
Definido en el encabezado
<utility>
|
||
|
struct
piecewise_construct_t
{
explicit
piecewise_construct_t
(
)
=
default
;
}
;
|
(1) | (desde C++11) |
|
constexpr
std::
piecewise_construct_t
piecewise_construct
{
}
;
|
(2) |
(desde C++11)
(inline desde C++17) |
1)
std::piecewise_construct_t
es un tipo de etiqueta de clase vacía utilizado para eliminar la ambigüedad entre diferentes funciones que toman dos argumentos de tipo tupla.
2)
La constante
std::piecewise_construct
es una instancia de
(1)
.
Las sobrecargas que no utilizan
std::piecewise_construct_t
asumen que cada argumento de tupla se convierte en el elemento de un par. Las sobrecargas que utilizan
std::piecewise_construct_t
asumen que cada argumento de tupla se utiliza para construir, por partes, un nuevo objeto del tipo especificado, que se convertirá en el elemento del par.
Contenidos |
Biblioteca estándar
Los siguientes tipos y funciones de la biblioteca estándar lo utilizan como etiqueta de desambiguación:
|
implementa tupla binaria, es decir, un par de valores
(plantilla de clase) |
|
|
(C++20)
|
prepara la lista de argumentos que coincide con la variante de construcción uses-allocator requerida por el tipo dado
(plantilla de función) |
una
view
que consiste en una secuencia generada produciendo repetidamente el mismo valor
(plantilla de clase) (objeto de punto de personalización) |
Ejemplo
Ejecutar este código
#include <iostream> #include <tuple> #include <utility> struct Foo { Foo(std::tuple<int, float>) { std::cout << "Constructed a Foo from a tuple\n"; } Foo(int, float) { std::cout << "Constructed a Foo from an int and a float\n"; } }; int main() { std::tuple<int, float> t(1, 3.14); std::cout << "Creating p1...\n"; std::pair<Foo, Foo> p1(t, t); std::cout << "Creating p2...\n"; std::pair<Foo, Foo> p2(std::piecewise_construct, t, t); }
Salida:
Creating p1... Constructed a Foo from a tuple Constructed a Foo from a tuple Creating p2... Constructed a Foo from an int and a float Constructed a Foo from an int and a float
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2510 | C++11 | el constructor por defecto no era explícito, lo que podía llevar a ambigüedad | hecho explícito |
Véase también
|
construye un nuevo par
(función miembro pública de
std::pair<T1,T2>
)
|