命名空间
变体
操作

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 起内联)
1) std::piecewise_construct_t 是一个空类标签类型,用于区分接收两个元组参数的不同函数。
2) 常量 std::piecewise_construct(1) 的一个实例。

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

内容

[编辑] 标准库

以下标准库类型和函数使用它作为歧义标记

实现二元元组,即一对值
(类模板) [编辑]
准备与给定类型所需的 uses-allocator 构造类型匹配的参数列表
(函数模板) [编辑]
一个 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++ 标准。

DR 应用于 已发布的行为 正确行为
LWG 2510 C++11 默认构造函数是非显式的,这可能会导致歧义 已改为显式

[编辑] 另请参见

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