Не догадывайтесь о проблемах производительности: хотя люди часто возвращают std::string
по константной ссылке, возвращать их по значению не составляет особого труда, особенно если у вас нет другого выбора.
На самом деле, иногда вы можете даже изменить это последнее, поскольку это влияет только на несколько вещей для клиентского кода.
Помните: преждевременная оптимизация - корень всего зла.
Теперь, чтобы полностью ответить на вопрос, вы можете прекрасно вернуть ссылку в виртуальной функции (является ли она чистой или нет, на самом деле не имеет значения). Просто убедитесь, что никогда не вернете ссылку на временный.
Если некоторый производный класс должен выполнить дорогостоящие вычисления, он все равно может сохранить результат в элементе std::wstring
и вернуть ссылку на него. Но, опять же, не угадывайте проблемы с производительностью: сначала оцените и сосредоточьтесь на этом, только если это кажется узким местом.