C++中emplace函数的不适场景总结(一)

从原位构造变为复制或移动

上面的实例是把字符串字面量都写在了函数的参数上, 但若传入的是一个左值又会怎样呢?

复制代码
#include <string>
#include <vector>

int main() {
    std::vector<std::string> arr;

    std::string str("Hello World");
    arr.push_back(str);
    arr.emplace_back(str);
}

可以告诉大家,这里 push_back() 和 emplace_back() 函数在运行时的性能是没有差异的。因为两者都是将参数 str 在尾部进行拷贝构造函数。

同理如果将两处都使用 std::move() 则效果也一致。

(注意:不要操作已经移动过的对象了,这里只是简单的 diamagnetic 实例和讲解。)

可见当参数类型和容器数据类型一致时,emplace 的优势将不再明显。

相关推荐
Peregrine920 分钟前
C++ - > 类和对象
java·c++·算法
余醉 | dtminer24 分钟前
56%的保护效应藏在乳腺密度里:Nat Commun 高分中介孟德尔随机化全 R 管线拆解(附核心图)
开发语言·r语言·孟德尔随机化
2501_9339232526 分钟前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
Wang's Blog28 分钟前
Java 中间件之 RabbitMQ 快速入门: SpringAMQP 消息转换器
java·中间件·java-rabbitmq
染指11101 小时前
142.Agent-多Agent框架-通过Skills实现多Agent
开发语言·人工智能·python·langchain·agents
Re_zero1 小时前
一次 SSE 断流排查:PrintWriter 吞掉了我的 IOException
java·后端
好好学习O(∩_∩)O1 小时前
[QT] 多线程moveToThread 和易踩的8个坑
开发语言·qt
我是人✓1 小时前
Java核心语法:作用域、循环与大数值处理
java·开发语言·后端
敲代码的乔帮主1 小时前
Python 3 现代类型标注入门
开发语言·python
夜之眷属2 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法