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

后端 未结 2 1232
闹比i
闹比i 2021-01-27 01:35

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 non-modifia

2条回答
  •  梦毁少年i
    2021-01-27 01:40

    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
    

提交回复
热议问题