Возврат ссылки на константу лучше, так как она не делает копию строки. Причина, по которой я говорю это, заключается в том, что интерфейс более гибкий таким образом - вы всегда можете скопировать ссылку const в другую строку, если это необходимо, или вы можете использовать ее в качестве ссылки - до вызывающего. Возврат члена по значению, и вы всегда застреваете с копией. Если name
большой или используется часто, это повлияет на производительность, и я предполагаю, что производительность - одна из причин, по которой вы используете C++.
Теперь другие ответы поднимают некоторые отрицательные моменты о возврате ссылки const, которая, как я считаю, недействительна.
Забота о том, что вы можете отбросить const, действительна, но исключение const является лишь одним из инструментов инструментария разработчика C++. Зачем убирать? Если кто-то действительно хочет возиться с вашим объектом, он всегда может сделать это на C++, обратившись к памяти напрямую, поэтому создание кода для сохранения ваших абонентов от самих себя бессмысленно. Кастинг сотника const показывает намерение сделать это, и, на мой взгляд, все в порядке. Это означает, что у вызывающего есть некоторые очень специфические причины для этого и знает, что const, который отбрасывается, предназначен для неконстантного объекта и, следовательно, является безопасным.
Учебный пример в другом ответе просто глуп:
const string s& = foo().name();
Опять же, создав код, чтобы попытаться сохранить вызывающий от себя ограничивают вас от силы C++. Если бы кто-то действительно хотел бы сделать вышеизложенное, то был бы правильный способ:
string s = foo().name();
Так что этот вопрос тоже спорный.
Единственным действительным моментом является то, что он несколько раскрывает реализацию. На мой взгляд, повышение эффективности, однако, перевешивает эту озабоченность.
Что вы действительно должны спросить себя, так это, что такое обычный случай использования name()
?
Отвечая на этот вопрос, вы ответите, какой вкус вы должны использовать.
Для меня тот факт, что он называется name
, подразумевает, что он будет использоваться в основном для печати/регистрации и сравнения.Таким образом, ссылка const является явным победителем здесь.
Также посмотрите на руководство по стилю. Большинство из них проведут вас по ссылке const и возвращают элементы по ссылке const. Есть очень веские причины сделать это, как описано выше.
Нельзя. [[[[[[[[[[[[[[[[[[[ –
] Что вы пытаетесь сказать? – abcde
Один экземпляр и его ссылка –