Should I return std::string or const char* from a getter?

c++, return-value, string

Solution

Return the string.

I think the better abstraction is worth it. Until you can measure a meaningful performance difference, I'd argue that it's a micro-optimization that only exists in your imagination.

It took many years to get a good string abstraction into C++. I don't believe that Bjarne Stroustroup, so famous for his conservative "only pay for what you use" dictum, would have permitted an obvious performance killer into the language. Higher abstraction is good.

Problem

I'm trying to use `std::string` instead of `char*` whenever possible, but I worry I may be degrading performance too much. Is this a good way of returning strings (no error checking for brevity)? ``` std::string linux_settings_provider::get_home_folder() { return std::string(getenv("HOME")); } ``` Also, a related question: when accepting strings as parameters, should I receive them as `const std::string&` or `const char*`?

Original source