为什么我们需要 void 函数
Why do we need void functions?
有什么深不可测的理由为什么我们需要 void 函数吗?
出于 int main()
是标准的原因,为什么不简单地从不需要返回值的函数中返回0
呢?我看到了使用 int
类型的三个直接优势:
1. 我们可以返回一个代码来指示函数状态;通常,如果出现问题,我们可以返回非零错误代码。
2. 调试时
我们可以输出函数的返回值3. 这是main()例程的标准;也就是说,int main() {}
.为什么不效仿呢?
有什么理由让我们更喜欢void
而不是int
吗?
示例:对奶酪数组进行排序并通过引用返回的函数。
#include <iostream>
#include <string.h>
int sortArrayInt(string & _cheese[]) { // pun intended ;D
int errCode = 0;
try {
// ..sort cheese[] array
} catch(e) {
errCode = 1;
}
return errCode;
}
void sortArrayVoid(string & _cheese[]) {
// .. sort cheese[] array
// no return code to work with, doesn't follow int main() standard, and nothing to output.
}
int main() {
string cheese[5] = {"colby","swiss","cheddar","gouda","brie"};
std::cout << "Sort Status: " << sortCheeseArrayInt(cheese) << std::endl;
sortArrayVoid(cheese);
// ..print cheese array
}
OUTPUT:
Sort Status: 0
brie, cheddar, colby, gouda, swiss
当函数业务逻辑不需要整数时,没有理由返回整数。不这样做的原因如下:
- 意图清晰。如果你不返回一个值,每个人都知道函数不返回一个值。调用者不需要困惑自己试图理解如何处理返回值 0。
- 编译器会为您执行检查。如果您尝试在预期没有值时返回值(错误地)(或者在未提供任何值时读取值),编译器将警告您
- 返回值不是免费的。为什么要在不需要的东西上浪费周期?
在 c/c++ 中,如果你不需要使用它,你就不应该为它付费。
如果您需要返回 int,您将返回 int 并支付费用,否则不要返回 (void) 并且无需支付任何费用。
另请注意,此类功能如下:
int itoa(const char * str) {}
实际上无法报告错误,因为 0 和 -1 是有效的返回值。
从函数语言的角度来看,如果函数返回值,这是一个经典函数,如果不是,这是一个过程,其目的是一些副作用。这种区别在命令式语言中也很有用。
Main 返回 int,因为调用方(执行环境)也需要它?为什么你假设一个程序应该或不应该返回一个值?
没有什么可以阻止你声明函数以返回一个值,只是不使用该值。但这对呼叫者来说并不好读。显式将函数声明为 void 会告诉调用方此函数不返回任何内容。这允许调用方相应地行为,而无需存储或担心返回值。在 c++ 中有一个适当的机制来捕获错误行为,它被称为"异常处理"。
C++的主要设计目标之一是避免让人们仅仅因为有人可能需要而为他们不需要的东西付费。如果你有一个返回和 int 的函数:
int foo(){
return 0;
}
您需要放置一个 return 语句,并且需要将返回值复制到调用方。当然,人们可以想到一种机制来避免这种情况,而这只是void
返回类型。
在编程逻辑函数有四种不同的类型。重点是只让一个函数只做你需要它做的事情,仅此而已。如果你让它做额外的事情,这会导致错误和安全漏洞。
-
什么都不拿,还东西。这对于获取已设置的数据非常有用。
int func(){ return 1; }
-
拿走一些东西,什么也没回来。这适用于高级作业或诸如 cout() 之类的过程,它需要一些东西但什么也不返回。
void func( param ){ }
-
拿东西,还东西。这有利于处理,例如添加到某些内容或修剪此字符串。
int func ( param ) { return 1; }
什么 都不拿,什么也不回来。这很好设置标志或做视觉效果。
void func ( ) { }
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 如何将指针从一个void函数传递到另一个C++
- 为什么我在使用void函数时得到错误代码C2276
- 指针没有更新它在void函数内部指向的值
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- void 函数可以传递值参数吗?
- 在 void 函数中使用 #include 变量C++
- 如何在 C++ 中将 void 函数传递给 void 指针
- 使用运算符调用 void 函数时出错<set>
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- C++ :: 如何捕获由 void 函数创建的矩阵
- 如何将一个 void 函数传递给另一个 void 函数?
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- C++命名空间中调用 void 函数的错误
- 当数组位于两个循环之间时,您可以调用数组的 void 函数吗?
- 结构新手,我对如何从 void 函数中返回值并将其放入另一个函数感到困惑
- 查找素数:错误:控件到达非void函数的末尾