Namespaces
Variants

std::piecewise_construct,std::piecewise_construct_t

来自 zh.cppreference.net
 
 
 
 
定义于头文件 <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 起内联)
1) std::piecewise_construct_t是一个空类标签类型,用于区分接受两个 tuple 参数的不同函数。
2)常量 std::piecewise_construct是 (1)的一个实例。

不使用 std::piecewise_construct_t的重载假定每个 tuple 参数成为 pair 的一个元素。使用 std::piecewise_construct_t的重载假定每个 tuple 参数被用于分段构造指定类型的新对象,该对象将成为 pair 的元素。

标准库

以下标准库类型和函数将其用作消歧标签:

td> 准备与给定类型所需的使用分配器构造方式相匹配的参数列表
(函数模板)
实现二元组,即包含两个值的组合
(类模板)
通过重复生成相同值构成的 view
(类模板) (定制点对象)

示例

#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++ 标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 2510 C++11 默认构造函数为非显式,可能导致歧义 改为显式

参见

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