返回子程序的值永远不应该执行i / o?

时间:2015-10-30 00:29:11

标签: c++ io reference void

我正在阅读一本优秀的编程实践文档,我发现了这一点:

•返回值的子程序不会使用参考参数,也不会执行任何I / O操作。 返回值的子程序不会调用使用参考参数或执行I / O操作的其他子程序。

所以,我猜你只能在带有引用的void子程序中使用i / o? 但是人们真的遵循这条规则还是不是很重要?

1 个答案:

答案 0 :(得分:0)

  

返回值的子程序不会使用参考参数

我确实在一些指导原则中看到了它,因为通过引用返回结果会使程序的可读性降低。

例如,在下面的示例调用中,您如何知道哪个参数是函数的输入以及哪个参数是其输出:

centroid = optimize(data,window);

尽管如此,通过引用返回输出结果通常都是相同的。但是,您必须遵循严格的签名约定,其中输入参数为const且输出参数不是:

double optimize(const Data&   data,   // const ref,     means input
                      Window& window);// non-const ref, means output

有时提出的另一种解决方案是输出参数应该通过指针而不是引用传递。因此,在上面的示例中,您将使用不同的签名,其中window由指针传递:

double optimize(const Data&   data,   // const ref, means input
                      Window* window);// pointer,   means output

基于此约定,您可以通过检查函数的调用方式来猜测输入和输出,而无需验证函数的签名:

centroid = optimize(data,&window);
  

返回值的子程序不会执行任何I / O操作。

我之前从未遇到过这个指南,所以我不知道它的基本原理: - /实际上,有许多执行I / O的值返回函数,例如:输入函数,用户对话框,解析配置文件等。