【发布时间】:2019-09-14 16:13:00
【问题描述】:
有一个类似的问题16114572 但我这里更具体。
请回答第 3 行的问题:
void change_head(map<K, V>& m, V const& value) {
auto head = m.begin();
if (head->second != value) // <--- Make sense?
head->second = value;
}
比如说,我们对V 唯一了解的就是具有运算符!= 并且它是可复制。
但是,没有关于这些操作有多快的信息(copy 和!=)。
统一更新: 想象一下,我们正在建立一个图书馆。我们可能会假设相等会比复制更快,但我不确定!这种优化值得吗?
我的主要语言不是 C++,所以我只是想知道 C++ 世界的人在做什么。
【问题讨论】:
-
但是,没有关于这些操作有多快的信息(复制和!=)。恕我直言,这是让这个问题难以回答的重要事实。对于原始类型,我会阻止比较并只分配值。阻止额外的分支通常会使分配变得更加复杂。对于非原始类型,它取决于复制成本和
operator!=()。另一个问题是总体上是否值得优化单个分配。如果它是在循环中发生数百万次的事情...... -
与您的问题无关,但是,如果您的意图是更改地图内容,您确定
const对地图的引用吗? -
您要求对此代码的性能发表评论,但需要注意的是,我们不能对代码部分的性能做出任何假设。这个问题无法回答。
-
@prog-fh 谢谢,我已经删除了“const”
标签: c++ iterator operator-overloading copy-constructor equality