返回值的子程序不应执行i/o
A value returning subprograms should never perform i/o?
我在阅读一份良好的编程实践文档时发现:
•值返回子程序将不使用参考参数,也不会执行任何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
有时提出的另一种解决方案是,输出参数应该通过指针而不是引用传递。因此,在上面的示例中,您将使用不同的签名,其中window
是通过指针传递的:
double optimize(const Data& data, // const ref, means input
Window* window);// pointer, means output
根据这个约定,您可以通过检查函数的调用方式来猜测输入和输出,而无需验证函数的签名:
centroid = optimize(data,&window);
返回值的子程序不会[…]执行任何I/O操作。
我以前从未遇到过这个指南,所以我不知道它的基本原理://实际上,有很多值返回函数可以执行I/O,例如输入函数、用户对话框、解析配置文件等等
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- 虽然开始双骰子程序的循环未正确执行
- 返回值的子程序不应执行i/o