Spec-Zone.ru › C++

std::piecewise_construct, std::piecewise_construct_t

Определено в заголовке <utility>
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
(1) (с C++11)
(2)
constexpr std::piecewise_construct_t piecewise_construct{};
(с C++11)
(до C++17)
inline constexpr std::piecewise_construct_t piecewise_construct{};
(с C++17)
1) std::piecewise_construct_t — это пустой класс-тег, используемый для разграничения различных функций, принимающих два кортежа в качестве аргументов.
2) Константа std::piecewise_construct является экземпляром (1).

Перегрузки, не использующие std::piecewise_construct_t, предполагают, что каждый кортеж-аргумент становится элементом пары. Перегрузки, использующие std::piecewise_construct_t, предполагают, что каждый кортеж-аргумент используется для поэтапного построения нового объекта заданного типа, который станет элементом пары.

Пример

#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);
}

Вывод:

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

Отчёты о дефектах

Следующие отчёты о дефектах, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение, опубликованное в стандарте Правильное поведение
LWG 2510 C++11 конструктор по умолчанию был неявным, что могло привести к неоднозначности сделан явным

См. также

(конструктор)
создаёт новую пару
(общедоступный член-функция std::pair<T1,T2>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/piecewise_construct

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API