【发布时间】:2011-09-03 23:13:53
【问题描述】:
在N3059 中,我找到了对(和元组)分段构造的描述(并且在新标准中)。
但我不知道什么时候应该使用它。我发现了关于 emplace 和不可复制实体的讨论,但是当我尝试它时,我无法创建一个我 需要 piecewiese_construct 的案例或可以看到性能优势.
示例。我认为我需要一个不可复制的类,但是movebale(转发所需):
struct NoCopy {
NoCopy(int, int) {};
NoCopy(const NoCopy&) = delete; // no copy
NoCopy& operator=(const NoCopy&) = delete; // no assign
NoCopy(NoCopy&&) {}; // please move
NoCopy& operator=(NoCopy&&) {}; // please move-assign
};
然后我有点预计标准对构造会失败:
pair<NoCopy,NoCopy> x{ NoCopy{1,2}, NoCopy{2,3} }; // fine!
但它没有。实际上,这正是我所期望的,因为“移动东西”而不是在 stdlib 中的任何地方复制它,应该是这样吗?
因此,我认为我没有理由这样做,或者这样:
pair<NoCopy,NoCopy> y(
piecewise_construct,
forward_as_tuple(1,2),
forward_as_tuple(2,3)
); // also fine
- 那么,用例是什么?
-
如何以及何时使用
piecewise_construct?
【问题讨论】:
-
尝试同时禁用移动构造函数。
标签: c++11 tuples use-case forwarding piecewise