在c++中,是否存在插入比放置更好的情况?



为了避免这种情况,我已经通读了下面的问题。我的问题可以看作是这个问题的后续。c++ map

中的Insert/emplace/operator[]从我能找到的信息来看,我看不出你为什么要使用insert而不是emplace。从整体上看,使用就位似乎是更好的选择。对于复杂类型,它似乎明显更好。,但即使使用指针和POD,您仍然可以节省几次复制数据的时间。(编辑:删除以简化问题)

我在这里有错吗?无论如何,是否存在插入是更好选择的用例?或者更一般地说(假设我错了),有人能详细说明每种方法的优点和缺点,以及你什么时候会选择其中一种而不是另一种吗?

Insert具有固定类型的const&&&重载。这可以更早地诱导转换,并允许基于{}的构建。

Emplace则没有。因此,转换发生在方法内部(而不是在方法外部),并且您不能使用{}来构造不命名的类型。

就这些了。


至于你的第二点(关于插入导致普通旧数据的额外副本):

如果中间存储没有指向整数的指针或引用,那么在抽象机器中复制整数或其他类型的对象是没有可观察到的效果的。c++是在抽象机器上指定的,只有该机器的可观察特性与编译器必须做的事情有关。

int x = 3;
int y = x;
int z = y;

如果没有人再提到x或y,则它们的存在没有可观察到的影响,上述等价于int z = 3;

一些编译器在某些调试设置中会创建那些没有副作用的变量。但这只是为了帮助调试,而不是c++实际规定的程序应该做的事情。

相关内容

最新更新