避免非const引用形参
Avoid non-const reference parameters
我遇到了这个输出参数约定,它更倾向于指针而不是引用。
"在函数形参列表中,所有引用必须为const:
void Foo(const string &in, string *out);
实际上,在Google代码中,输入参数是值或const引用,而输出参数是指针,这是一个非常强大的约定。输入形参可以是const指针,但绝不允许使用非const引用形参,除非约定需要,例如swap()。"
这似乎与这个问题的公认答案有些不同,后者认为应该使用引用,除非函数涉及一些指针运算。
所以我想知道这个input param is const reference, output param is pointer
是否只是谷歌风格的问题,或者它是一个更普遍接受的实践(避免非const引用参数)
您没有提到这种编码实践的基本原理。我所知道的主要原因是,当你扫视一段代码时,它能让你更清楚地看到写的是什么。即使你不记得每个被调用的函数都做了什么,你仍然可以知道变量什么时候被修改了,因为你会看到它的地址被传递。
另外,改变一个函数有时会修改它的一个参数,这不会无声地破坏其他代码。你必须去每个呼叫点,按指针调用。您可能会注意到,如果其中一个调用站点需要您而不是更改该参数。
我不能说这个惯例有多被广泛采用或喜爱,但就我所知,这就是它背后的原因。
它可能会导致编译器输出稍微不太理想。按引用调用意味着调用者可以假设只修改了实际变量,而没有对同一数组的其他元素进行指针算术修改。(除非进行跨文件编译,否则编译器无法知道指向被调用函数的指针arg没有被视为数组。)
相关文章:
- 非类型引用形参/实参
- 将右值引用形参强制转换为右值引用
- 给引用形参赋值使对象无效
- 是否有必要在定义中使用模板形参来引用同一个类?
- 指向成员变量的引用/指针作为模板形参
- 修改const形参引用
- 为什么模板非类型形参指针和引用实参需要是全局的
- 右值或左值(const)引用形参
- 将所有引用形参设为const的理由是什么?
- 我可以重用右值引用形参来返回右值引用吗?
- const引用形参的默认值
- map带有const模板形参和const引用模板形参
- 为什么c++中通过引用传递的形参不需要解引用操作符
- NULL直接传递给需要const引用形参的函数(vc++ 4.2)
- c++引用形参函数
- 函数引用形参的默认值
- 将函数输出直接传递给接受引用形参的函数
- 避免非const引用形参
- 如何访问const引用形参的值
- 可以基于引用形参类型重载构造函数吗?