Я конвертирую свой код, чтобы следовать Руководство по стилю Google C ++. Справочные Аргументы Правило гласит: «Все параметры, передаваемые по ссылке, должны быть помечены как const» и «входные аргументы являются значениями или ссылками const, а выходные аргументы являются указателями».
Что касается подписи void MyTable::LoadTable(ifstream &fin)
как я могу пометить параметр fin
const
дано LoadTable
вызывает некоторую неконстантную функцию fin
например, fin.seekg
? Я думаю fin
должен рассматриваться как параметр ввода / вывода, поэтому он немного особенный. Что гуглеры будут делать в этой ситуации?
ОБНОВЛЕНИЕ: я знал, что есть много критических замечаний по поводу руководства по стилю Google. Мне просто интересно, как гуглеры справляются с этим, и, возможно, я нашел ответ: есть другое правило Streams чтение «Использовать потоки только для регистрации». Может быть, они просто не используют потоки в этой ситуации.
Чтобы соответствовать правилам Google, измените объявление.
void MyTable::LoadTable( ifstream& fin )
в
void MyTable::LoadTable( ifstream* fin )
Теперь вам может быть интересно, какой в этом смысл? И большая часть ответа, вероятно, заключается в том, что руководство по стилю Google C ++ просто не имеет особого смысла за пределами Google. Отчасти это можно объяснить, постулируя необходимость поддерживать большой объем унаследованного кода в стиле C, но его части просто сбивают с толку.
Как только один пример, std::getline
очень сильно нарушает правила стиля Google.