异常如何在C ++中起作用?

时间:2016-11-08 20:08:25

标签: c++ c++11 exception-handling

ebool keep_trying= true;
do {
    char fname[80]; // std::string is better
    cout Image "Please enter the file name: ";
    cin Image fname;
    try {
        A= read_matrix_file(fname);
        ...
        keep_trying= false;
    } catch (cannot_open_file& e) {
        cout Image "Could not open the file. Try another one!\n";
    } catch (...)
        cout Image "Something is fishy here. Try another file!\n";
    }
} while (keep_trying);

此代码来自Discovering modern c++。我不明白try-block代表什么“A”和下一个catch-block中的“e”(cannot_open_file& e)

2 个答案:

答案 0 :(得分:0)

这似乎是一个不完整的代码段。你可以假设' A'是read_matrix_file()返回的任何类型。并且' e'是对invalid_open_file类型的引用,应该在代码中的其他地方定义。

答案 1 :(得分:0)

int read_matrix_file(const char* fname, ...)
{
    fstream f(fname);
    if (!f.is_open())
        return 1;
        ...
    return 0;
}

" A"是int read_matrix_file()函数的返回值。

struct cannot_open_file {};
void read_matrix_file(const char* fname, ...)
{
   fstream f(fname);
   if(!f.is_open())
   throw cannot_open_file{};
   ...
}

' E'是我们试图捕获的异常(由void read_matrix_file()函数抛出)。基本代码实际上。 感谢您的帮助StackOverflow!

所有代码均来自" 发现现代C ++ "。请参阅问题链接。