О правиле "Ссылочные аргументы" в стиле Google C++
Я конвертирую свой код в соответствии с руководством по стилю Google C++. Правило ссылочных аргументов гласит: "Все параметры, передаваемые по ссылке, должны быть помечены как const" и "входные аргументы являются значениями или ссылками const, а выходные аргументы являются указателями".
Что касается подписи void MyTable::LoadTable(ifstream &fin)
как я могу пометить параметр fin
const
дано 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.