错误函数故障 我现在用C++做编程原理和实践,我不太明白如何使用错误函数,这是书中使用的。

错误函数故障 我现在用C++做编程原理和实践,我不太明白如何使用错误函数,这是书中使用的。,c++,error-handling,runtime-error,C++,Error Handling,Runtime Error,功能是 inline void error(const string& s) { throw runtime_error(s); } 它包含在std_lib_设备头文件中 这是一个利用它的小程序 int main() { cout << "Please enter expression (we can handle +, –, *, and /)\n"; cout << "add an x to end expression (e.

功能是

inline void error(const string& s)
{
    throw runtime_error(s);
}
它包含在std_lib_设备头文件中

这是一个利用它的小程序

int main() 
{ 
    cout << "Please enter expression (we can handle +, –, *, and /)\n"; 
    cout << "add an x to end expression (e.g., 1+2*3x): "; 
    int lval = 0; 
    int rval; 
    cin>>lval;                                     // read leftmost operand 
        if (!cin) error("no first operand"); 
        for (char op; cin>>op; ) {          // read operator and right-hand operand 
                                                               // repeatedly 
            if (op!='x') cin>>rval; 
            if (!cin) error("no second operand"); 
            switch(op) 
            { 
               case '+': 
                   lval += rval;               // add: lval = lval + rval 
                   break; 
               case '–': 
                   lval –= rval;               // subtract: lval = lval – rval 
                   break; 
               case '*': 
                   lval *= rval;           // multiply: lval = lval * rval 
                   break; 
               case '/': 
                   lval /= rval;            // divide: lval = lval / rval 
                   break; 
               default:                           // not another operator: print result 
                   cout << "Result: " << lval << '\n'; 
                   keep_window_open(); 
                   return 0; 
             } 
         } 
     error("bad expression");
}
我的问题是,如果在抛出错误时没有捕获错误以显示消息,那么这个错误函数将如何工作。

要确保打印错误消息,您需要自己执行,而不是依赖于实现质量

免责声明:编译器未触及代码


提示:您可以使用免费的AStyle formatter来修复代码的格式。

在您显示的代码中,如果调用了error,则会立即中止程序。我不确定我会认为这是属于工作的含义,确切地说。我想说,也许现在是开始寻找更好的书的好时机。我记得,斯特劳斯特鲁普设计了页眉,以便在最初几周的学习中使用,这样开始时就更容易了,而不需要知道以后的概念。无论如何,当异常未捕获时,您的实现可能会打印消息。如果没有捕获,则程序终止。您的编译器可能决定是否显示该消息。您可以在main.In std_lib_facilities.h周围添加一个catch处理程序。在std_lib_facilities.h中,我们提供了一个error函数,默认情况下,该函数使用系统错误消息加上作为error参数传递的字符串终止程序。只是有点困惑而已。我知道,如果你添加catch语句,它将按预期工作,只是想问我是否遗漏了什么。
#include <iostream>      // std::cout, std::cerr
#include <stdexcept>     // std::runtime_error
#include <stdlib.h>      // EXIT_FAILURE, EXIT_SUCCESS
#include <string>        // std::string
using namespace std;

auto fail( string const& s ) -> bool { throw runtime_error( s ); }

void cpp_main()
{
    // What you would otherwise put directly in `main`, e.g.
    cout << "x? ";
    double x;
    cin >> x
        || fail( "Uh oh, that was not a valid value for x." );
}

auto main() -> int
{
    try
    {
        cpp_main();  return EXIT_SUCCESS;
    }
    catch( exception const& x )
    {
        cerr << "!" << x.what() << endl;
    }
    return EXIT_FAILURE;
}