int foo(type&bar); 是一种不好的做法?

Ear*_*rlz 3 c++ reference function

好吧,我们来了.我的C++书籍提出了另一个提议的做法.它说"返回值(非空)函数不应该将引用类型作为参数." 所以基本上如果你要实现这样的函数:

int read_file(int& into){
   ...
}
Run Code Online (Sandbox Code Playgroud)

并使用整数返回值作为某种错误指示符(忽略我们有异常的事实)然后该函数编写得很糟糕它实际上应该像

void read_file(int& into, int& error){

}
Run Code Online (Sandbox Code Playgroud)

现在对我来说,第一个更清晰,更好用.如果要忽略错误值,可以轻松完成.但是这本书暗示了后来的.请注意,本书并未说返回值函数是坏的.它宁愿说你应该只返回一个值,或者你应该只使用引用.

你对此有何看法?我的书上装满了废话吗?(再次)

Dan*_*wby 10

建议很愚蠢.直接返回值更小,更容易键入.

直接退货:

if (read_file(...)) {
    ... handle problem ...
}
Run Code Online (Sandbox Code Playgroud)

间接回报:

int status;

read_file(..., status);
if (status) {
    ... handle problem ...
}
Run Code Online (Sandbox Code Playgroud)

编辑:一个更大的问题是是否完全使用非const参考参数.让副作用飞出参数会令人惊讶.一个编码标准说参考参数应该是const,输出参数应该使用指针.通过这种方式,读者可以&在呼叫点处听到"这个参数发生了什么".


小智 5

我认为在整个项目中保持一致比在一种方式上传播更好是比另一种更好.