在N3059 中,我找到了对(和元组)分段构造的描述(并且在新标准中)。
但我看不出什么时候应该使用它。我发现了关于emplace和不可复制实体的讨论,但是当我尝试它时,我无法创建我需要 piecewiese_construct
或可以看到性能优势的案例。
例子。我以为我需要一个不可复制的类,但可以移动(转发所需):
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
?