gpt4 book ai didi

vector 类型类成员的 C++ getter

转载 作者:行者123 更新时间:2023-12-01 14:43:15 27 4
gpt4 key购买 nike

如果我有 vector或另一个对象作为类属性,那么我应该如何为该属性实现一个getter?它应该返回成员本身还是它的引用?下面的例子:

#include "B.h"
#include <vector>

class A {
vector<int> numbers;
B obj1;

public:
vector<int> get_numbers() const;
// or
vector<int> & get_numbers() const;

B get_obj() const;
// or
B & get_obj() const;
};

注意:我也不确定 const .

最佳答案

vector<int> & get_numbers() const;


绝对 不是 这。您会发现很难返回对非 const 的引用,该引用引用来自 const 限定成员函数的成员。

vector<int> get_numbers() const;


这是一个选项。但有一些考虑:
  • 无法使用此方法修改成员。这很好,除非您需要修改它们。
  • 这需要您在每次调用 getter 时复制 vector 。这可能是非常昂贵的操作。

  • 为避免不必要的复制,您可以返回对 const 的引用:
    const vector<int> & get_numbers() const;

    为了通过允许 getter 的移动构造来避免更多不必要的复制,您可以使用一组重载:
    const vector<int> &  get_numbers() const & ;
    vector<int> && get_numbers() &&;

    要允许修改,您可以使用返回引用的非 const 限定成员函数:
          vector<int> &  get_numbers()       & ;

    另一种方法是根本不使用 setter/getter 。如果该类的用户需要访问该成员,那么它可能应该是公开的。

    您可以改为提供其他形式的受限访问。一种惯用的 C++ 方式是拥有 beginend返回迭代器的成员函数。这将允许更改 vector 的内容而无需调整其大小。

    关于 vector 类型类成员的 C++ getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60730529/

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