std::piecewise_construct, std::piecewise_construct_t

来自cppreference.com
< cpp‎ | utility
 
 
工具库
语言支持
类型支持(基本类型、RTTI)
库功能特性测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)

 
 
在标头 <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 的重载假定每个元组实参被用于逐段构造指定类型的新对象,它们将成为对偶的元素。

标准库

下列标准库类型和函数将它用作区分标签:

实现二元组,即一对值
(类模板)
准备好与给定类型所要求的使用分配器构造的形式向匹配的实参列表
(函数模板)
由重复产出同一值生成的序列组成的 view
(类模板) (定制点对象)

示例

#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> 的公开成员函数)