【问题标题】:Generic vector class, make 0 size reference to generic array members;泛型向量类,对泛型数组成员进行 0 大小引用;
【发布时间】:2017-01-13 21:30:52
【问题描述】:

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

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

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

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

【问题讨论】:

  • T const&amp; x() const { return v[0]; } 怎么样?这没有任何成本。
  • 你真的需要持有一个引用,或者返回引用的函数就是你所追求的
  • @KerrekSB 打败了我 :)
  • @Muscampester 程序大小无关紧要,但谢谢 :)
  • 但是你应该使用一个更有特色的名字,否则如果你尝试使用x作为一个普通的变量你会遇到问题。例如#define Vec_x v[0]。然后你可以做myvec.Vec_x = 100;

标签: c++ arrays templates generics vector


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多