带指针的顶级 const

top-level const with pointers

假设我有 class 其中有 std::vector<Object*>

应该这样的方法:

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

转换为:

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

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

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

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

但出于性能原因,您可能需要考虑 return 一个 const std::vector<Object*>& 参考。这是否是个好主意取决于您对 class 的使用模型(例如生命周期、范围)。就性能而言,通过 const 引用 return 是个好主意,因为所有 STL 容器都会生成相当昂贵的深度复制。