Это недавно появилось в обзоре обзора кода, но без удовлетворительного заключения. Типы, о которых идет речь, являются аналогами С++ string_view TS. Это простые обходные обертки вокруг указателя и длины, украшенные некоторыми пользовательскими функциями:
#include <cstddef>
class foo_view {
public:
foo_view(const char* data, std::size_t len)
: _data(data)
, _len(len) {
}
// member functions related to viewing the 'foo' pointed to by '_data'.
private:
const char* _data;
std::size_t _len;
};
Возник вопрос о том, есть ли аргумент в любом случае, чтобы предпочесть передавать такие типы представлений (включая предстоящие типы string_view и array_view) по значению или по ссылке const.
Аргументы в пользу перехода по значению составляли "меньше ввода", "могут мутировать локальную копию, если представление имеет значимые мутации" и "вероятно, не менее эффективно".
Аргументы в пользу pass-by-const-reference составляли "более идиоматический для передачи объектов const и amp;" и "вероятно, не менее эффективный".
Есть ли какие-либо дополнительные соображения, которые могли бы качать аргумент окончательно так или иначе с точки зрения того, лучше ли передавать типы идиоматических представлений по значению или по ссылке const.
Для этого вопроса можно с уверенностью предположить семантику С++ 11 или С++ 14 и достаточно современные инструментальные цепочки и целевые архитектуры и т.д.