访问作为c++中某个类的成员的数组

accessing arrays that are a member of a class in c++

本文关键字:成员 数组 c++ 访问      更新时间:2023-10-16

我有一个c++类,它有一个私有数组成员。

class array_test
{
public:
    std::tuple<double*, int> get_vector_member();
private:
    double test_array[3];
};

在C++11中,有一个更好的方法调用来获得double[],它不需要将double作为指针。我担心我自己或其他人会删除指针,并导致一些奇怪的未定义行为。

我希望我没有包含get_vector_member的实现是个问题。

提供典型的C++字段访问器函数,使用常量和非常量重载,返回对字段的引用,怎么样?

class X
{
    double data[3];
public:
    // Accessors
    double (&get())[3] { return data; }
    const double (&get() const)[3] { return data; }
};

在C++14中,这段代码更容易编写:

auto & get() { return data; }
const auto & get() const { return data; }

您可以将其设置为std::array。它们优于原始阵列的一些原因:

  • 通过frontback成员功能,轻松访问元素
  • 它们是可复制和可分配的
  • 可选边界检查访问
  • 冷却比较操作,如==!=<
  • fill成员函数
  • 通过引用传递时没有奇怪的语法

然后通过引用返回:

class array_test
{
public:
    const std::array<double, 3>& get_array_member() const;
private:
    std::array<double, 3> test_array;
};