C++ 关于";引用参数";谷歌C++;风格

C++ 关于";引用参数";谷歌C++;风格,c++,google-style-guide,C++,Google Style Guide,我正在转换我的代码以遵循。该规则规定“所有通过引用传递的参数必须标记为const”和“输入参数是值或const引用,而输出参数是指针” 关于签名void MyTable::LoadTable(ifstream&fin),如果LoadTable调用了fin的一些非常量函数,例如fin.seekg,我如何标记参数fin?我认为fin应该被视为一个输入/输出参数,因此它有点特殊。谷歌在这种情况下会怎么做 更新:我知道有很多关于谷歌风格指南的批评。我只是想知道谷歌是如何解决这个问题的,也许我找到了一个

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

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



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

为了遵守谷歌的指导原则,请更改声明

void MyTable::LoadTable( ifstream& fin )

现在你可能想知道,这有什么意义?大部分答案可能是谷歌C++风格指南在谷歌之外根本没有什么意义。部分原因可以通过假设需要维护大量C风格的遗留代码来解释,但部分原因令人困惑


举个例子,
std::getline
非常违反谷歌风格的指南。

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

void MyTable::LoadTable( ifstream& fin )

现在你可能想知道,这有什么意义?大部分答案可能是谷歌C++风格指南在谷歌之外根本没有什么意义。部分原因可以通过假设需要维护大量C风格的遗留代码来解释,但部分原因令人困惑



举个例子,
std::getline
非常违反谷歌风格指南。

谷歌风格指南后面只有一些谷歌代码库。IMHO,这是一个愚蠢的规则。我期待着CPPCon谈论这种风格指南。为什么你要转换你的代码遵循谷歌C++风格指南?@广寒宫的编码准则不是垃圾,考虑谷歌风格指南后面只有一些谷歌代码基础。这是一个愚蠢的规则。我期待着CPPCon谈论这种风格指南。为什么你要转换你的代码遵循谷歌C++风格指南?@广寒宫的编码准则不是垃圾,考虑为什么你使用const &输入参数和*作为输出参数而不是输出参数?这正是我感到困惑的地方。@user3344003:一种可能的解释是,他们希望调用可能会修改对象的函数,以便从调用方的角度看清楚,而不必知道被调用函数的实际功能。我个人认为,如果可能的话,我会在函数名中传达这一点,但我明白这就是原因。@chris:我百分之百同意。@user3344003假设你非常害怕有人会
operator=
数据(为什么其他人会引用?即使没有,一些卑鄙的villian也会更改它),而外部用户却没有意识到这一点:那么写一篇风格指南。你得到谷歌规则。这本指南看起来像是为了让那些只了解Java和C的交集的人不会对代码感到惊讶而编写的。为什么你要用const&作为输入参数,用*作为输出参数,而不是&作为输出参数?这正是我感到困惑的地方。@user3344003:一种可能的解释是,他们希望调用可能会修改对象的函数,以便从调用方的角度看清楚,而不必知道被调用函数的实际功能。我个人认为,如果可能的话,我会在函数名中传达这一点,但我明白这就是原因。@chris:我百分之百同意。@user3344003假设你非常害怕有人会
operator=
数据(为什么其他人会引用?即使没有,一些卑鄙的villian也会更改它),而外部用户却没有意识到这一点:那么写一篇风格指南。你得到谷歌规则。该指南看起来像是为了让那些只了解Java和C的交集的人不会对代码感到惊讶而编写的。