std::piecewise_construct_t
来自cppreference.com
在标头 <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++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2510 | C++11 | 默认构造函数为非 explicit ,能导致歧义 | 使之为 explicit |
参阅
(C++11) |
用于为逐段构造的函数消歧义的 piecewise_construct_t 类型的对象 (常量) |
构造新的 pair ( std::pair<T1,T2> 的公开成员函数)
|