带指针的顶级 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 容器都会生成相当昂贵的深度复制。
假设我有 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 容器都会生成相当昂贵的深度复制。