关于 Google C++ 风格中的“引用参数”规则

lzl*_*31x 0 c++ google-style-guide

我正在转换我的代码以遵循google C++ 风格指南。引用参数规则规定“所有通过引用传递的参数都必须标记为 const”和“输入参数是值或 const 引用,而输出参数是指针”。

关于签名void MyTable::LoadTable(ifstream &fin),我如何标记fin const给定的参数LoadTable调用一些非常量函数fin,例如fin.seekg?我认为fin应该被视为输入/输出参数,因此它有点特殊。在这种情况下,谷歌员工会怎么做?


更新:我知道谷歌风格指南有很多批评。我只是想知道谷歌员工如何解决这个问题,也许我找到了答案:还有另一个规则Streams读取“仅使用流进行日志记录”。也许他们只是在这种情况下不使用流。

Che*_*Alf 5

为了遵守 Google 指南,请更改声明

void MyTable::LoadTable( ifstream& fin )
Run Code Online (Sandbox Code Playgroud)

void MyTable::LoadTable( ifstream* fin )
Run Code Online (Sandbox Code Playgroud)

现在您可能想知道,这有什么意义?很大一部分原因可能是 Google C++ 风格指南在 Google 之外没有多大意义。其中部分内容可以通过假设需要维护大量 C 风格遗留代码来解释,但其中部分内容却令人困惑。

仅举一个例子,std::getline它非常违反 Google 风格指南。

  • @user3344003:一种可能的解释是,他们希望对可能修改对象的函数的调用从调用者的角度是清楚的,而不必知道被调用的函数实际上做了什么。 (4认同)