我有一个像这样的简单模板矢量类:
template <typename T, size_t N>
class Vec {
public:
T v[N];
//T const& x = v[0];
...
}
我可以在没有大小成本的情况下引用数组成员吗?如果我写下注释掉的代码,它会分配指针的大小,是否有变通方法或#define或某种魔法?
答案 0 :(得分:1)
不,没有办法将类型的引用类型成员添加到0大小的成本中。引用只是一个更高级,更安全,更方便的指针。它仍指向某个特定的内存位置,需要存储该位置的地址。
答案 1 :(得分:1)
我可以在没有大小成本的情况下引用数组成员吗?
是。具有自动存储持续时间的引用不(始终)需要存储。根据具体情况,它们可能需要存储在堆栈中,但不会增加Vec
的大小。因此,您可以使用返回引用的函数:
T const& Vec::first() const { return v[0]; }
顺便说一下,std::vector
和其他容器也提供类似的功能。