gpt4 book ai didi

c++ - 在 emplace() 中创建对象时复制省略

转载 作者:IT老高 更新时间:2023-10-28 22:03:44 35 4
gpt4 key购买 nike

我看到很多代码在工作中人们使用 emplace 和 emplace_back 和一个临时对象,像这样:

struct A {
A::A(int, int);
};

vector<A> v;
vector<A>.emplace_back(A(1, 2));

我知道emplace_back的重点是能够直接传递参数,像这样:

v.emplace_back(1, 2);

但不幸的是,这对少数人来说并不清楚。但我们不要纠缠于此......

我的问题是:编译器是否能够对此进行优化并跳过创建和复制?还是我真的应该尝试解决这些问题?

供您引用...我们正在使用 C++14。

最佳答案

My question is: is the compiler able to optimize this and skip the create and copy? Or should I really try to fix these occurrences?

在一般情况下,它无法避免复制。由于 emplace_back 通过转发引用接受,它必须从纯标准的角度创建临时对象。毕竟,这些引用必须绑定(bind)到对象。

复制省略是一组允许避免复制(或移动)构造函数并省略复制的规则,即使构造函数和相应的析构函数有副作用。它仅适用于特定情况。通过引用传递参数不是其中之一。因此,对于非平凡的类型,对象拷贝不能通过 as-if 规则内联,如果它的目标是符合标准,编译器的双手就会受到约束。

关于c++ - 在 emplace() 中创建对象时复制省略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740699/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com