开发者

Is it possible for a non-member function to return a const value?

开发者 https://www.devze.com 2023-02-26 07:05 出处:网络
If so, how? Does this question even make sense? In my case it would make no sense to have the returned object modified by the caller, so I want to mark it as n开发者_如何学Con-modifiable.const MyClas

If so, how? Does this question even make sense?

In my case it would make no sense to have the returned object modified by the caller, so I want to mark it as n开发者_如何学Con-modifiable.


const MyClass foo(); is valid, but returning a const value doesn't make sense - it's copied anyway.

You can return e.g. a const reference: const MyClass & foo(); is also perfectly valid. This doesn't prevent the user from making a copy though.

If you're thinking about const MyClass * foo(); then the const is more meaningful - the user will not be able to modify the pointed to MyClass instance.


It can be done, but doesn't necessarily make a lot of sense. If you return something by value, what the caller receives is a temporary copy of what you returned, so they normally can't modify it anyway.

It can make more sense when you're returning a reference; if (for example) you receive something by reference, and return a reference to the same, you probably want to const-qualify what you return if what you received was const-qualified. This typically means overloading your function for const/non-const parameter, each with matching return type.

Edit: This can deal with (for example) a problem that arose in C with functions like strstr and strchr, which take a const-qualified pointer, but return a pointer into the same data (string, in this case) that's not const-qualified. In C, these form a hole in the type system, where you can accidentally modify (or at least try to) something that was intended to be const, without any (visible) cast.

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

精彩评论

暂无评论...
验证码 换一张
取 消