从函数返回const引用
Returning const reference from function
我希望我的函数返回一个对象数组。但是我想对返回的引用进行一些限制,以便返回的值/引用不会被调用者修改。
如
class A { B **arrB; public : A() { initialize arrB } B** getB() { return arrB; } } 之前在上面的代码中,getB()函数返回的数组不应该被修改。有人能建议最好的方法吗?const能帮上忙吗?
应该这样做:
const B * const * getB() const { return arrB; }
编辑:添加const,因为成员函数不能修改内容。
是的,它会有帮助。但是,您将得到一个关于从B **
到const B **
的非法转换的错误,但这就是const_cast
:
const B** getB() const
{
return const_cast<const B**>(arrB);
}
注意,我在函数声明之后添加了一个额外的const
限定符。这告诉编译器该函数不会修改类中的任何内容。
嗯,我看到的可能的方法是返回从私有数组复制的新数组(包含原始对象实例的副本)。如果你想确保类的私有成员没有被改变,那么你就不需要关心获取arrB指针副本的代码将对它做什么。但当然也有缺点,比如更多的内存使用,消费者必须删除获得的数组。
const
没有真正的帮助。当你试图修改数组时,编译器可能会提出一些警告/错误,但你总是可以转换为非const
指针并修改它。const
对类的用户来说更像是一个提示:我给你的指针是只读的;修改它,后果自负!
相关文章:
- 在 const 函数中通过引用和指针返回之间的区别
- 使用对const结构的const数组的引用进行构造
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 在C++17中,引用const字符串的语义应该是什么
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 类型为 "Bucket&"(未限定的 const 限定)的引用不能使用 "SortedList." 类型的值进行初始化 如何修复此错误?
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 将返回类型专用化为 void 或 const 左值引用
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 在 C++ 中通过引用传递类成员时,Const 不起作用
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 错误:对类型 'const ItemInstance' 的引用无法绑定到类型 'void' 的右值
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 如何在构造函数中传递 const 引用时强制编译器不接受右值
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- const TYPE&- 我什么时候想通过引用 const 来使用?
- 指针引用const null值
- 三元运算符和通过引用const延长临时对象的生存期
- 为什么必须引用const来避免复制形参?