# std::piecewise_construct_t

< cpp‎ | utility

定义于头文件 `<utility>` |  |
struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; |  | (C++11 起)

`std::piecewise_construct_t` 是用于在接收二个 `tuple` 参数的不同函数间消歧义的空类标签类型。

不使用 `std::piecewise_construct_t` 的重载假设每个 `tuple` 参数各变成一个 `pair` 的元素。使用 `std::piecewise_construct_t` 的重载假设每个 `tuple` 参数用于逐块构造一个指定类型的新对象，而它将成为 pair 的元素。

### 示例

    #include <iostream>
    #include <utility>
    #include <tuple>

    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::pair<Foo, Foo> p1(t, t);
        std::pair<Foo, Foo> p2(std::piecewise_construct, t, t);
    }

输出：

    Constructed a Foo from a tuple
    Constructed a Foo from a tuple
    Constructed a Foo from an int and a float
    Constructed a Foo from an int and a float

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 2510 | C++11 | 默认构造函数为非 explicit ，能导致歧义 | 使之为 explicit

### 参阅

piecewise_construct (C++11) | 用于为逐段构造的函数消歧义的 `piecewise_construct_t` 类型的对象 (常量)
(构造函数) | 构造新的 pair (`std::pair<T1,T2>` 的公开成员函数)