【问题标题】:Template interface - to use by reference or by value模板接口 - 按引用或按值使用
【发布时间】:2014-12-27 02:32:57
【问题描述】:

我有一个模板界面

template <typename Graph, typename V>
size_t bfs(const Graph& g, const V s, const V x);

其中类型 V 是顶点的名称。预计它将是一种简单的复制类型(任何原语),但没有什么能阻止用户使用 std::string 作为名称。

通过引用,复制了 8 个字节(64 位),并且必须做额外的工作才能取消引用。这与 4 个字节相比,对于命名顶点的 intsize_t 的通常情况没有额外的工作。

接口应该是const V&amp; 还是只是const V

【问题讨论】:

    标签: c++ templates interface reference


    【解决方案1】:

    可能需要在实现中复制的任何推导参数都应按值传递(尽管添加const 是没有意义的:它不会更改接口但会限制实现)。主要原因是:如果用户想要/需要给参数引用语义并且它是按值传递的,它可以很容易地完成,例如,通过传递std::ref(x)。但是,一旦实体通过引用传递(包括所有三种形式 T&amp;T const&amp;T&amp;&amp;),就不能使其具有值行为。

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2012-03-31
      • 2012-01-16
      • 2012-10-14
      • 1970-01-01
      相关资源
      最近更新 更多