通用向量类,对通用数组成员进行0大小引用;

时间:2017-01-13 21:30:53

标签: c++ arrays templates generics vector

我有一个像这样的简单模板矢量类:

template <typename T, size_t N>
class Vec {
public:

    T v[N];
    //T const& x = v[0];
    ...
}

我可以在没有大小成本的情况下引用数组成员吗?如果我写下注释掉的代码,它会分配指针的大小,是否有变通方法或#define或某种魔法?

2 个答案:

答案 0 :(得分:1)

不,没有办法将类型的引用类型成员添加到0大小的成本中。引用只是一个更高级,更安全,更方便的指针。它仍指向某个特定的内存位置,需要存储该位置的地址。

答案 1 :(得分:1)

  

我可以在没有大小成本的情况下引用数组成员吗?

是。具有自动存储持续时间的引用不(始终)需要存储。根据具体情况,它们可能需要存储在堆栈中,但不会增加Vec的大小。因此,您可以使用返回引用的函数:

T const& Vec::first() const { return v[0]; }

顺便说一下,std::vector和其他容器也提供类似的功能。