gpt4 book ai didi

c++ - 从 C++11 中的函数调用返回 std::vector 的正确方法( move 语义)

转载 作者:IT老高 更新时间:2023-10-28 12:36:58 26 4
gpt4 key购买 nike

我想填充 std::vector(或其他一些 STL 容器):

class Foo {
public:
Foo(int _n, const Bar &_m);
private:
std::vector<Foo> fooes_;
}

1.好看的ctor,性能昂贵

std::vector<Foo> get_vector(int _n, const Bar &_m) {
std::vector<Foo> ret;
... // filling ret depending from arguments
return ret;
}

Foo::Foo(int _n, const Bar &_m) : fooes_(get_vector(_n, _m) {}

2.更好的性能,更差的 ctor

void fill_vector(int _n, const Bar &_m, std::vector<Foo> &_ret) {
... // filling ret depending from arguments
}

Foo::Foo(int _n, const Bar &_m) { fill_vector(_n, _m, fooes_); }

是否可以使用 C++0x( move 语义特征等)重写第一个示例中的 get_vector 函数以避免冗余复制和构造函数调用?

最佳答案

如果您使用的是与 C++0x 兼容的编译器和标准库,则可以从第一个示例中获得更好的性能无需执行任何操作get_vector(_n, _m) 的返回值是临时的,std::vector 的 move 构造函数(一个接受右值引用的构造函数)将自动调用您无需再做任何工作。

一般来说,非库编写者不需要直接使用右值引用;您将自动获得相当一部分的好处。

关于c++ - 从 C++11 中的函数调用返回 std::vector 的正确方法( move 语义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6211575/

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