4

我读了这段代码(Bjarne Stroustrup 着)。我很困惑......main函数体不在{},并且函数不返回值(as int)。它有效...为什么?

#include "std_lib_facilities.h" 

int main()
try
{
    cout<< "please enter two floating-point values separated by an operator\n The operator can be + - * or / : ";
    double val1 = 0;
    double val2 = 0;
    char op = 0;
    while (cin>>val1>>op>>val2) {   // read number operation number
        string oper;
        double result;
        switch (op) {
        case '+':
            oper = "sum of ";
            result = val1+val2; 
            break;
        case '-':
            oper = "difference between ";
            result = val1-val2; 
            break;
        case '*':
            oper = "product of ";
            result = val1*val2; 
            break;
        case '/':
            oper = "ratio of";
            if (val2==0) error("trying to divide by zero");
            result = val1/val2; 
            break;
        //case '%':
        //  oper = "remainder of ";
        //  result = val1%val2; 
        //  break;
        default:
                error("bad operator");
        }
        cout << oper << val1 << " and " << val2 << " is " << result << '\n';
        cout << "Try again: ";
    }
}
catch (runtime_error e) {   // this code is to produce error messages; it will be described in Chapter 5
    cout << e.what() << '\n';
    keep_window_open("~");  // For some Windows(tm) setups
}
catch (...) {   // this code is to produce error messages; it will be described in Chapter 5
    cout << "exiting\n";
    keep_window_open("~");  // For some Windows(tm) setups
}
4

1 回答 1

6

该代码使用Function Try Block,这是一种特殊语法,允许将函数的整个主体嵌入到 try/catch 块中(主要用于类构造函数,以捕获基类或成员子类的构造函数抛出的异常-对象)。

此外,main()是唯一一个不需要显式返回值的返回值函数。如果没有指定返回值,0则假定为。

根据 C++11 标准的第 3.6.1/5 段:

中的 return 语句main具有离开main函数(销毁具有自动存储持续时间的任何对象)并std::exit使用返回值作为参数进行调用的效果。如果控制到达末尾main没有遇到return语句,效果就是执行

return 0;
于 2013-05-15T15:20:00.627 回答