C++ 从函数返回常量引用

C++ 从函数返回常量引用,c++,C++,我希望我的函数返回一个对象数组。但我希望对返回的引用进行一些限制,以便调用方不会修改返回值/引用 乙二醇 甲级 { B**arrB; 公众: () { 初始化arrB } B**getB() { 返回arrB; } } 在上面的代码中,不应该修改getB()函数返回的数组。 有人能建议最好的方法吗? “const”能帮上忙吗?是的,它会帮上忙的。但是,您将得到一个关于从B**到const B**非法转换的错误,但这就是const\u cast的原因: const B** getB() con

我希望我的函数返回一个对象数组。但我希望对返回的引用进行一些限制,以便调用方不会修改返回值/引用

乙二醇

甲级 { B**arrB; 公众: () { 初始化arrB } B**getB() { 返回arrB; } }
在上面的代码中,不应该修改getB()函数返回的数组。 有人能建议最好的方法吗?
“const”能帮上忙吗?

是的,它会帮上忙的。但是,您将得到一个关于从
B**
const B**
非法转换的错误,但这就是
const\u cast
的原因:

const B** getB() const
{
    return const_cast<const B**>(arrB);
}
const B**getB()const
{
返回常数(arrB);
}
注意,我在函数声明之后添加了一个额外的
const
限定符。这告诉编译器函数不会修改类中的任何内容。

这应该可以做到:

const B * const * getB() const { return arrB; }

编辑:添加了常量,因为成员函数不修改内容。

const
实际上没有帮助。当您尝试修改数组时,编译器可能会发出一些警告/错误,但您始终可以强制转换到非
常量
指针并对其进行修改。
const
更像是对类用户的提示:我给你的指针是只读的;修改它,后果自负

我看到的可能方法是返回从私有数组复制的新数组(包含原始对象实例的副本)。如果您想确保类的私有成员没有更改,那么就不必关心获取arrB指针副本的代码将如何处理它。但当然也有一些缺点,比如内存使用量过大,用户必须删除获得的数组

您不只是返回
向量
常量
的任何原因都会有所帮助,但如果用户将指针强制转换为非常量指针,他可以修改向量。。。但据我所知,const是唯一的方法,除非你有特定的理由不使用标准容器。也许你需要一个向量的向量,也许你需要一个平面向量。你想实现什么?你为什么需要它?@IulianŞerbănoiu但如果用户想要打破抽象,他无论如何都可以做到。例如,他可以将类本身强制转换为另一个成员相同但为public的类。这是100%未定义的行为,但可能有效。谢谢。这似乎就是我要找的。我会试试这个。
const B * const * getB() const { return arrB; }