О правиле "Ссылочные аргументы" в стиле Google C++

Я конвертирую свой код в соответствии с руководством по стилю Google C++. Правило ссылочных аргументов гласит: "Все параметры, передаваемые по ссылке, должны быть помечены как const" и "входные аргументы являются значениями или ссылками const, а выходные аргументы являются указателями".

Что касается подписи void MyTable::LoadTable(ifstream &fin)как я могу пометить параметр finconst дано LoadTable вызывает некоторую неконстантную функцию finнапример, fin.seekg? Я думаю fin должен рассматриваться как параметр ввода / вывода, поэтому он немного особенный. Что гуглеры будут делать в этой ситуации?


ОБНОВЛЕНИЕ: я знал, что есть много критики по поводу руководства по стилю Google. Мне просто интересно, как гуглеры справляются с этим, и, может быть, я нашел ответ: есть другое правило " Потоки", читающие "Использовать потоки только для регистрации". Может быть, они просто не используют потоки в этой ситуации.

1 ответ

Решение

Чтобы соответствовать правилам Google, измените объявление.

void MyTable::LoadTable( ifstream& fin )

в

void MyTable::LoadTable( ifstream* fin )

Теперь вам может быть интересно, какой в ​​этом смысл? И большая часть ответа, вероятно, заключается в том, что руководство по стилю Google C++ просто не имеет особого смысла за пределами Google. Отчасти это можно объяснить, постулируя необходимость поддерживать большой объем унаследованного кода в стиле C, но его части просто сбивают с толку.

Как только один пример, std::getline очень сильно нарушает правила стиля Google.

Другие вопросы по тегам