Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问作为c+中类成员的数组+; 我有一个C++类,它有一个私有数组成员。< /P> class array_test { public: std::tuple<double*, int> get_vector_member(); private: double test_array[3]; }; 类数组\u测试 { 公众: std::tuple get_vector_member(); 私人: 双测试_阵列[3]; };_C++_Arrays_C++11 - Fatal编程技术网

访问作为c+中类成员的数组+; 我有一个C++类,它有一个私有数组成员。< /P> class array_test { public: std::tuple<double*, int> get_vector_member(); private: double test_array[3]; }; 类数组\u测试 { 公众: std::tuple get_vector_member(); 私人: 双测试_阵列[3]; };

访问作为c+中类成员的数组+; 我有一个C++类,它有一个私有数组成员。< /P> class array_test { public: std::tuple<double*, int> get_vector_member(); private: double test_array[3]; }; 类数组\u测试 { 公众: std::tuple get_vector_member(); 私人: 双测试_阵列[3]; };,c++,arrays,c++11,C++,Arrays,C++11,在C++11中,有没有更好的方法调用来获取double[],而不需要获取double作为指针。我担心我自己或其他人会删除指针,并导致一些奇怪的未定义行为 < P> >我希望我没有包含GETHyVECRTORE成员的实现是个问题。 < P>如何提供典型的C++字段访问函数,具有常量和非const重载,返回对字段的引用? class X { double data[3]; public: // Accessors double (&get())[3] { retur

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


< P> >我希望我没有包含GETHyVECRTORE成员的实现是个问题。

< P>如何提供典型的C++字段访问函数,具有常量和非const重载,返回对字段的引用?

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 test\u array并具有<代码> GETYVECORITHOME成员()/<代码>返回<代码> STD::数组和< /C> >(或<代码> STD::数组const和< />代码>。从技术上讲,这不是C++数组。这是一个C型数组。所以,不,C++不会开始修改C样式数组行为,如果这是你的问题。一个C++数组。@ PythaStup:这是胡说。C++ KerrekSB有。我不是说它不能工作,我只是说C++是C的超集,如果你担心使用C版本的东西,那么使用C++编写的功能来取代C功能。同样的,“hello World”是一个C风格字符串,如果你不想使用<代码> const char */COD> >你可以使用C++ <代码>字符串< /C> >类型。这是一个坏习惯;这就像使用<代码> Primtf>代码> <代码> cOut.PARTIZEPAST: C++不是C.Soad的超集,但括号里有什么?还有,为什么不能在c++11中使用auto&,因为c++11也有auto&?@ZacharyKraus:“怎么了”是什么意思?这就是C++中如何编写类型(返回类型是代码>双(和)[3 ] < /代码>)。不幸的是,类型语法有点疯狂,但这主要是C的错误。如果有疑问,请使用c++decl。C++11没有普通函数的返回类型推断,这在C++14中是新的。但是为什么&和get()都在括号内?我知道&必须在那里,因为双(&)[3]。是的,语法真的很古怪。事实上,在我的实际项目中,它太古怪了,我只是使用了一个大小为3的向量。如果没有括号,
    get
    将被解释为一个函数,该函数返回一个包含3个对double的引用的数组。@ZacharyKraus:您可以使用typedefs来简化您的工作:
    使用T=double[3];T foo;T&get_foo(){return foo;}
    。同样的事情。
    class array_test
    {
    public:
        const std::array<double, 3>& get_array_member() const;
    
    private:
        std::array<double, 3> test_array;
    };