为什么我们需要void函数?

时间:2016-05-26 17:52:59

标签: c++ c++11 int return void

为什么我们需要无效功能有什么理由吗?

出于同样的原因,int main()是一个标准,为什么不从一个不需要返回值的函数返回0?我发现使用int类型有三个直接优势:
我们可以返回一个代码来指示功能状态;通常,如果出现问题,我们可以返回非零错误代码 2.调试时我们可以输出函数的返回值 它是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

5 个答案:

答案 0 :(得分:10)

当函数业务逻辑不需要时,没有理由返回整数。不这样做的原因如下:

  • 明确的意图。如果不返回值,则每个人都知道函数不返回值。呼叫者不需要试图理解如何处理0的返回值。
  • 编译器会为您进行检查。如果您尝试在没有预期时(错误地)返回值(或者在没有提供时读取值)编译器将警告您
  • 返回值不是免费的。为什么要浪费你不需要的东西呢?

答案 1 :(得分:1)

在c / c ++中,如果你不需要使用它,就不应该付钱。

如果你需要返回int,你将返回int并支付它,否则不返回(void)并且不支付任何费用。

另请注意这样的功能:

int itoa(const char * str) {}

实际上无法报告错误,因为0和-1是有效的返回值。

从函数式语言的角度看,如果函数返回值这是一个经典函数,如果不是这个程序,那么目的就是一些副作用。这种区别在命令式语言中也很有用。

答案 2 :(得分:0)

Main返回int因为调用者(执行环境)也需要它吗?为什么假设程序应该或不应该返回值?

没有什么可以阻止你声明你的函数返回一个值而不是使用那个值。但这对于呼叫者来说并不好读。将函数显式声明为void会告诉调用者此函数不返回任何内容。这允许调用者相应地表现并且不需要存储或担心返回值。有一种适当的机制可以捕获c ++中的错误行为,它被称为“异常处理”。

答案 3 :(得分:0)

C ++的主要设计目标之一是避免让人们为某些他们不需要的东西买单,因为有人可能需要它。如果你有一个函数返回和int:

int foo(){
    return 0;
}

需要放置一个return语句,并且需要将返回值复制到调用者。当然,人们可以想到一种避免这种情况的机制,并且仅仅是void返回类型。

答案 4 :(得分:0)

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

  1. 什么也不做,然后回归。这对于获取已设置的数据非常有用。

    int func(){ 
        return 1; 
    }
    
  2. 拿一些东西,什么也不返回。这对于高级作业或cout()这样的过程很有用,它会占用一些东西,但不会返回任何内容。

    void func( param ){ 
    }
    
  3. 拿东西然后归还一些东西。这适用于处理,例如添加到某个内容或修剪此字符串。

    int func ( param ) { 
        return 1; 
    }
    
  4. 什么也不做,什么也不返回。这很适合设置标志或做视觉效果。

    void func ( ) {  
    }