为什么我们需要 void 函数

Why do we need void functions?

本文关键字:void 函数 我们 为什么      更新时间:2023-10-16

有什么深不可测的理由为什么我们需要 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返回类型。

在编程逻辑函数有四种不同的类型。重点是只让一个函数只做你需要它做的事情,仅此而已。如果你让它做额外的事情,这会导致错误和安全漏洞。

  1. 什么都不拿,还东西。这对于获取已设置的数据非常有用。

    int func(){ 
        return 1; 
    }
    
  2. 拿走一些东西,什么也没回来。这适用于高级作业或诸如 cout() 之类的过程,它需要一些东西但什么也不返回。

    void func( param ){ 
    }
    
  3. 拿东西,还东西。这有利于处理,例如添加到某些内容或修剪此字符串。

    int func ( param ) { 
        return 1; 
    }
    
  4. 什么
  5. 都不拿,什么也不回来。这很好设置标志或做视觉效果。

    void func ( ) {  
    }