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

后端 未结 2 1231
闹比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条回答
  • 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
    
    0 讨论(0)
  • 2021-01-27 01:47

    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.

    0 讨论(0)
提交回复
热议问题