Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回值的子程序不应执行i/o?_C++_Io_Reference_Void - Fatal编程技术网

C++ 返回值的子程序不应执行i/o?

C++ 返回值的子程序不应执行i/o?,c++,io,reference,void,C++,Io,Reference,Void,我在阅读一篇优秀编程实践文档时发现: •返回值子程序不会使用参考参数,也不会执行任何I/O操作。 返回值的子程序不会调用使用引用参数或执行I/O操作的其他子程序 所以,我想您只能在带有引用的void子程序中使用I/o? 但人们真的遵守这条规则吗?还是这条规则并不重要 返回值的子程序将不使用引用参数 我确实在一些指南中看到了这一点,因为通过引用返回结果会降低程序的可读性 例如,在下面的示例调用中,如何知道哪个参数是函数的输入,哪个参数是函数的输出: centroid = optimize(data

我在阅读一篇优秀编程实践文档时发现:

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

所以,我想您只能在带有引用的void子程序中使用I/o? 但人们真的遵守这条规则吗?还是这条规则并不重要

返回值的子程序将不使用引用参数

我确实在一些指南中看到了这一点,因为通过引用返回结果会降低程序的可读性

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

centroid = optimize(data,window);
尽管如此,通过引用返回输出结果通常都是一样的。但是,您必须遵循严格的签名约定,其中输入参数为
const
,而输出参数不是:

double optimize(const Data&   data,   // const ref,     means input
                      Window& window);// non-const ref, means output
有时提出的另一种解决方案是,输出参数应该通过指针而不是引用传递。因此,在上面的示例中,您将使用不同的签名,其中
窗口
通过指针传递:

double optimize(const Data&   data,   // const ref, means input
                      Window* window);// pointer,   means output
基于此约定,您可以通过检查函数的调用方式来猜测输入和输出,而无需验证函数的签名:

centroid = optimize(data,&window);
返回值的子程序将不会[…]执行任何I/O操作

在此之前,我从未遇到过此指南,因此我不知道其原理:-/实际上,有许多执行I/O的值返回函数,例如输入函数、用户对话框、解析配置文件等