◐ Shell
clean mode source ↗

std::piecewise_construct, std::piecewise_construct_t - cppreference.com

来自cppreference.com

在标头 <utility> 定义

struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
(1) (C++11 起)
constexpr std::piecewise_construct_t piecewise_construct{};
(2) (C++11 起)
(C++17 起 inline)

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 << "从元组构造 Foo\n";
    }
 
    Foo(int, float)
    {
        std::cout << "从 int 和 float 构造 Foo\n";
    }
};

int main()
{
    std::tuple<int, float> t(1, 3.14);

    std::cout << "创建 p1...\n";
    std::pair<Foo, Foo> p1(t, t);

    std::cout << "创建 p2...\n";
    std::pair<Foo, Foo> p2(std::piecewise_construct, t, t);
}

输出:

创建 p1...
从元组构造 Foo
从元组构造 Foo
创建 p2...
从 int 和 float 构造 Foo
从 int 和 float 构造 Foo

参阅

构造新的 pair
(std::pair<T1,T2> 的公开成员函数)