我遇到了这个output param convention,它更喜欢指针而不是引用。
"在函数参数列表中,所有引用必须是const:
void Foo(const string &in, string *out);
事实上,Google代码中的一个非常强大的惯例是输入参数是值或const引用,而输出参数是指针。输入参数可以是常量指针,但我们从不允许非常量参考参数,除非按惯例要求,例如swap()。"
这似乎与此question的接受答案有所不同,后者表示应该使用引用,除非函数涉及一些指针算法。
所以我想知道这个input param is const reference, output param is pointer
是否只是google风格的问题,或者它是一种更普遍接受的做法(避免使用非const参考参数)。
答案 0 :(得分:4)
您没有提及此编码实践的基本原理。我所知道的主要原因是,当你在一段代码上扫视时,它会更清楚地写出什么。即使你不记得每个被调用的函数到底做了什么,你仍然可以告诉你什么时候修改变量,因为你会看到它的地址被传递。
此外,更改函数以便有时修改其中一个参数无法静默破坏其他代码。你必须去每个呼叫站点并通过指针调用。如果其中一个呼叫站点需要您不在那里更改该参数,您可能会注意到。
我不能说这个会议被广泛采用或喜爱的是什么,但就我所知,这就是背后的原因。
它可能会导致编译器输出略微不太理想。逐个引用调用意味着调用者可以假设只修改了实际变量,并且没有执行指针算法来修改同一个数组的其他元素。 (除非你有跨文件编译,否则编译器不能知道被调用函数的指针arg不被视为数组。)