- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
从 C++11 开始,要将一些 vector y
附加到另一个 vector x
,您可以这样做:
x.insert(x.end(), std::make_move_iterator(y.begin()), std::make_move_iterator(y.end()));
使用 C++17 类模板参数推导,可以更简洁地编写此代码:
x.insert(x.end(), std::move_iterator(y.begin()), std::move_iterator(y.end()));
从 C++17 开始,这不会使 std::make_move_iterator
变得多余吗? std::make_move_iterator()
还有一些值(value)吗?
最佳答案
是的。类模板参数推导的动机之一是避免必须编写这些类型的工厂函数。对于move_iterator
,CTAD 完全包含了工厂函数。它不仅为您提供所有相同的行为,而且实际上做得更好 - 如果您传入的迭代器已经是一个 move_iterator
,CTAD 不会提供你双重包装而工厂功能会。
但是,仍然会有很多使用工厂函数的代码……所以删除它会是一个破坏性的改变。但它只是过时了,它的继续存在不会对任何人造成伤害。它最终可能会被弃用。
请注意,虽然在这种情况下 CTAD 包含工厂功能是正确的,但在一般情况下情况并非如此,因为这两个选项可能具有不同的功能。它甚至不适用于所有迭代器适配器。对于 std::reverse_iterator(r)
,如果 r
已经是一个 reverse_iterator
,只会给你一份 r
... 而 std::make_reverse_iterator(r)
将重新反转迭代器(有效地返回一个正向迭代器)。
关于c++ - 自 C++17 的类模板参数推导以来,std::make_move_iterator 是否多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762121/
我的服务层有如下方法 public ModuleResponse GetModules(ModuleRequest request) { var response = new ModuleRe
我构建的工具栏与大多数工具栏一样,minHeight 设置为 actionBarSize: 但是,如果我删除这个属性,就完全没有区别了。工具栏保持其 actionBarSize,即使我删除菜单并将
我已经为 SVG 和剪辑路径苦苦挣扎了一段时间。 我正在尝试创建一个三 Angular 形剪辑路径,它将覆盖照片以给顶部一个“三 Angular 形”边缘。 我试图实现与照片完全相同的效果,但三 An
我有一个带有 2 个索引的 PostgreSQL 表。其中一个索引涵盖了 website_id 和 tweet_id 列,是一个唯一的 B 树索引。第二个索引只覆盖 website_id 列,是一个非
我是一名优秀的程序员,十分优秀!