- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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!
pair<NoCopy,NoCopy> y(
piecewise_construct,
forward_as_tuple(1,2),
forward_as_tuple(2,3)
); // also fine
piecewise_construct
? 最佳答案
并非所有类型都可以比复制更有效地移动,对于某些类型,甚至明确禁用复制和移动可能是有意义的。考虑 std::array<int, BIGNUM>
作为前一种类型的一个例子。
点与emplace
函数和 piecewise_construct
是这样的类可以就地构造,而无需创建要移动或复制的临时实例。
struct big {
int data[100];
big(int first, int second) : data{first, second} {
// the rest of the array is presumably filled somehow as well
}
};
std::pair<big, big> pair(piecewise_construct, {1,2}, {3,4});
pair(big(1,2), big(3,4))
进行比较凡二临
big
必须创建对象然后复制 - 移动在这里根本无济于事!相似地:
std::vector<big> vec;
vec.emplace_back(1,2);
map
或
unordered_map
:
std::map<int, big> map;
map.emplace(std::piecewise_construct, /*key*/1, /*value*/{2,3});
关于对和元组的piecewise_construct 的C++11 用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162201/
如果我创建一个带有 explicit 的结构构造函数 struct A { int x; explicit A(int x):x(x){}; }; 然后将其用作 mapped_type
当与 std::map 一起使用时,我对 std::piecewise_construct 有点困惑。示例: std::map m; // uses pair's piecewise construc
std::piecewise_construct,在 中定义,具有内部链接,因为它被声明为 constexpr。我想知道在 header 中使用 std::piecewise_construct 是否
我有一个 unordered_map哪些商店对。我想用这个片段放置对: map.emplace(std::piecewise_construct, std::f
我是一名优秀的程序员,十分优秀!