c++ 返回值有什么意义?

eqoofvh9  于 2022-12-15  发布在  其他
关注(0)|答案(3)|浏览(159)

I'm fairly new when it comes to C++ so bear with me. When learning about return values in functions, I was told that the proper way to write pure functions is to return a value every time. I attempted this in a small function that checks the user's age and returns whether or not they're an adult. The issue here, at least for me, is understanding the proper utilization of these return values. For example, in this code snippet here I'm returning whether or not they are an adult given their age in years.

main.h

#pragma once
#define LOG(x) std::cout << x
#define LOGCIN(x) std::cin >> x

bool check_age(int age) {
    if (age >= 18)
        return true;
    else
        return false;
}

main.cpp

#include <iostream>
#include "main.h"

bool check_age(int age);

int main() {
    int age;
    LOG("Enter your current age in years: ");
    LOGCIN(age);
    bool adult = check_age(age);
    if (adult == true) {
        LOG("You are an adult!");
    } else {
        LOG("You are not an adult!");
    }
}

However, when I rewrote this code without using return values, I got this.

main.h

#pragma once
#define LOG(x) std::cout << x
#define LOGCIN(x) std::cin >> x

void check_age(int age) {
    if (age >= 18)
        LOG("You are an adult!");
    else
        LOG("You are not an adult!");
}

main.cpp

#include <iostream>
#include "main.h"

void check_age(int age);

int main() {
    int age;
    LOG("Enter your current age in years: ");
    LOGCIN(age);
    check_age(age);
}

As you can see, the latter code choices is simpler and more compact. If code requires more lines and takes longer to write with return values, then what's even the point in using them?

insrf1ej

insrf1ej1#

通常函数的目的不仅仅是记录cout的内容,而是根据一些参数做出决定,或者返回一个值以便灵活使用,例如在二进制搜索中:

while(l <= r) {
    int mid = (l+r)>>1;
    if(check(/* parameters */)) {
        //update answer
        r = mid+1;
    } else l = mid-1;
}

当然,你可以让你的函数编辑一个全局变量,并根据它做出决定;但这会使代码更冗长:

while(l <= r) {
    int mid = (l+r)>>1;
    check(/* parameters */);
    if(ok /* global variable*/) {
        //update answer
        r = mid+1;
    } else l = mid-1;
}

再举一个例子,它更容易写(和读):

round(a)+ceil(b)

而不是让这些函数更新全局变量。

huwehgph

huwehgph2#

假设这个函数是别人提供的,在这种情况下,我们可能无法知道它的实现,那么我们的程序如何知道这个函数是否成功呢?
另外,有时候我们想从一个函数中了解一些信息,我想这就是为什么要使用返回值的原因。

sqougxex

sqougxex3#

从函数返回一个值有一个重要的目的--它允许您将“确定这个人是否是成年人”和“打印一些关于这个人的东西”这两个概念分开。
你可以想象无数的场景,程序需要知道某人是否是成年人,而不需要将其打印到控制台上--比如允许他们买酒、注册大学等等。
你也可以想象,如果你知道某人是一个成年人,你可能会有很多不同的方式来打印它(想象其他语言,或在网页上渲染它,等等)。
因此,通过返回值,您可以实现概念的分离,这将使您的代码在将来更加灵活。
也许你不需要这个玩具的例子,但是当你问这样一个广泛的设计问题时,这有点离题了。

相关问题