非成员函数是否可以返回const值?

时间:2011-04-16 20:23:56

标签: c++ const

如果是这样,怎么样?这个问题是否有意义?

在我的情况下,调用者修改返回的对象是没有意义的,所以我想将其标记为不可修改。

2 个答案:

答案 0 :(得分:5)

const MyClass foo();是有效的,但是返回一个const值没有意义 - 无论如何它都被复制了。

你可以退货,例如const引用:const MyClass & foo();也完全有效。这并不妨碍用户制作副本。

如果你正在考虑const MyClass * foo();那么const更有意义 - 用户将无法修改指向MyClass的实例。

答案 1 :(得分:1)

可以做到,但不一定有意义。如果按值返回某些内容,则调用者收到的内容是您返回的内容的临时副本,因此他们通常无法修改它。

当您返回参考时,它会更有意义;如果(例如)您通过引用收到某些内容并返回对该内容的引用,那么您可能希望对所返回的内容进行const限定,如果您收到的内容是const限定的。这通常意味着为const / non-const参数重载函数,每个参数都具有匹配的返回类型。

编辑:这可以处理(例如)C中出现的问题,其中包含strstrstrchr等函数,这些函数采用const限定指针,但返回指向同一数据的指针(字符串,在这种情况下) const-qualified。在C中,这些在类型系统中形成一个洞,在那里你可以意外地修改(或者至少尝试)一些想要成为const的东西,而不需要任何(可见的)强制转换。

char *s = strchr("Mystring", 'i');
*s = 'b'; // UB