Вот класс с двумя геттерами с разным типом возврата:
class A {
std::string m_test { "test" };
public:
std::string test_by_value { return m_test; }
const std::string& test_by_const_ref() { return m_test; }
};
// ...
Как лучше? Речь идет о std::string, а не о встроенных типах. S.T.L. говорится в https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler, что лучше возвращать по значению, потому что несколько копий будут оптимизированы? Или я неправильно его понял?
const reference&
, если объектA
переживет область действия ссылки и вам нужен только для чтения. 2. Если объектA
выходит за пределы области видимости и/или вам нужно его скопировать/изменить, вернитеvalue
. 3. Если вам нужно изменить исходное значение return, пока оно остается в области действия,reference&
. --- Не возвращайте ссылку, а затем делайте копию, чтобы изменить ее, всегда возвращайте значение для доступа на запись. - person CodeAngry   schedule 14.07.2015test_by_const_ref()
можетconst_cast<>
вернуть возвращенную ссылку, а затем приступить к изменению вашего (частного)m_test
. Это невозможно черезtest_by_value()
. - person DevSolar   schedule 14.07.2015