【问题标题】:top-level const with pointers带指针的顶级 const
【发布时间】:2019-07-03 03:02:55
【问题描述】:

假设我的班级有std::vector<Object*>

应该像这样的方法:

const std::vector<Object*> getSth() const
{
    return class_member_vector;
}

转换为:

std::vector<Object*> getSth() const
{
    return class_member_vector;
}

它总是安全的,应该总是以这种方式纠正吗?

【问题讨论】:

  • 第一个示例中的const 并没有真正提供任何好处。但在安全问题上,这取决于std::vector&lt;Object*&gt; 代表什么。
  • 由于你是按值返回,所以第一个sn-p返回的const没有任何作用。根据您的设计,您可能希望将其更改为 const std::vector&lt;const Object*&gt;&amp; getSth() const

标签: c++ pointers const-correctness


【解决方案1】:

是的,为了清楚起见,您应该使用第二个变体。是的,这总是安全的。在这两种变体中,您都按值返回返回值,因此修改返回的向量不会影响类。同样在这两种情况下,被调用者都可以修改向量元素指向的对象,因此外部const 在那里也没有什么区别。

第一个变体中的const 具有误导性,应该删除。

但出于性能原因,您可能需要考虑返回const std::vector&lt;Object*&gt;&amp; 参考。这取决于你对类的使用模型(例如生命周期、范围)这是否是一个好主意。在性能方面,通过 const 引用返回是一个好主意,因为所有 STL 容器都会进行深度复制,这相当昂贵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多