带指针的顶级const

时间:2019-02-08 20:27:18

标签: c++ pointers const-correctness

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

应采用以下方法:

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

转换为:

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

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

1 个答案:

答案 0 :(得分:1)

是的,为清晰起见,您应该使用第二种形式。是的,这始终是安全的。在这两种变体中,您都将按值返回返回值 ,因此该类不会受到修改返回的向量的影响。同样在这两种情况下,被调用方都可以修改向量元素指向的对象,因此外部const也不会有任何区别。

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

但是出于性能原因,您可能需要考虑返回const std::vector<Object*>&引用。这是否一个好主意取决于类的使用模型(例如生存期,范围)。在性能方面,最好通过const引用返回,因为所有STL容器都会进行深拷贝,而这样做的代价很高。