c++ primer plus 第15章友,异常和其他:异常,15.3.2返回错误码

c++ primer plus 第15章友,异常和其他:异常,15.3.2返回错误码

`
15.3.2返回错误码


15.3.2返回错误码

一种比异常终止更灵活的方法是,使用函数的返回值来指出问题。例如,ostream类的 get(void)成员通常返回下一个输入字符的ASCI码,但到达文件尾时,将返回特殊值 EOF。对 hmean()来说,这种方法不管用。任何数值都是有效的返回值,因此不存在可用于指出问题的特殊值。在这种情况下可使用指针参数或引用参数来将值返回给调用程序,并使用函数的返回值来指出成功还是失败。istream 族重载>>运算符使用了这种技术的变体。通过告知调用程序是成功了还是失败了,使得程序可以采取除异常终止程序之外的其他措施。程序清单15.8是一个采用这种方式的示例,它将hmean()的返回值重新定义为bool,让返回值指出成功了还是失败了,另外还给该函数增加了第三个参数,用于提供答案。

程序清单15.8 error2.cpp

//error2.cpp -- returning an error code
#include <iostream>
#include <cfloat>  // (or float.h) for DBL_MAX

bool hmean(double a, double b, double * ans);

int main()
{
    double x, y, z;

    std::cout << "Enter two numbers: ";
    while (std::cin >> x >> y)
    {
        if (hmean(x,y,&z))
            std::cout << "Harmonic mean of " << x << " and " << y
                << " is " << z << std::endl;
        else
            std::cout << "One value should not be the negative "
                << "of the other - try again.\n";
        std::cout << "Enter next set of numbers <q to quit>: ";
    }
    std::cout << "Bye!\n";
    return 0;
}

bool hmean(double a, double b, double * ans)
{
    if (a == -b)
    {
        *ans = DBL_MAX;
        return false;
    }
    else
    {
        *ans = 2.0 * a * b / (a + b);
        return true;
    }
}

程序说明
在程序清单15.8中,程序设计避免了错误输入导致的恶果,让用户能够继续输入。当然,设计确实依靠用户检查函数的返回值,这项工作是程序员所不经常做的。例如,为使程序短小精悍,本书的程序清单
都没有检查cout是否成功地处理了输出。
第三参数可以是指针或引用。对内置类型的参数,很多程序员都倾向于使用指针,因为这样可以明显看出是哪个参数用于提供答案。

另一种在某个地方存储返回条件的方法是使用一个全局变量。可能问题的函数可以在出现问题时将该全局变量设置为特定的值,而调用程序可以检查该变量。传统的C语言数学库使用的就是这种方法,它使用的全局变量名为errno。当然,必须确保其他函数没有将该全局变量用于其他目的。

相关推荐

  1. 10 异常与断言

    2024-07-09 17:14:01       42 阅读
  2. SpringController返回异常自动包装

    2024-07-09 17:14:01       34 阅读
  3. 7 1 异常处理

    2024-07-09 17:14:01       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 17:14:01       51 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 17:14:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 17:14:01       44 阅读
  4. Python语言-面向对象

    2024-07-09 17:14:01       55 阅读

热门阅读

  1. 大二暑假 + 大三上

    2024-07-09 17:14:01       23 阅读
  2. Git 常用命令及其作用

    2024-07-09 17:14:01       26 阅读
  3. Docker

    Docker

    2024-07-09 17:14:01      21 阅读
  4. C++多线程学习笔记

    2024-07-09 17:14:01       24 阅读
  5. 实现基于Spring Cloud的事件驱动微服务

    2024-07-09 17:14:01       23 阅读
  6. js使用websocket,vue使用websocket,copy即用

    2024-07-09 17:14:01       22 阅读