2015-12-19 2 views
1

Я в настоящее время студент-студент-инженер, у которого есть большой интерес и страсть в программировании. В эти дни я пытался изучить C++ через некоторые онлайн-ссылки и учебные материалы. Но есть какой-то вопрос, который я все равно не могу понять сам.Что здесь означает «cin.exceptions» и «exception»

Может кто-то прошу вас помочь мне объяснить, что именно cin.exceptions(ios_base::failbit); //throw exception on failbit set буквально означает?

Я знаю ios_base::failbit и исключения (- это класс в STL).

Согласно моему пониманию, это означает, что когда вход не является числом, он выдает флаг failbit, и как только это произойдет, система выкинет исключение.

Я смущен, почему в скобах для улова это exception, а не exceptions.

//this is a piece of code on my lecture notes 
#include <iostream> 
#include <string> 
using namespace std; 
int read_int(const string& prompt); 

int main() 
{ 
    int n; 
    n=read_int("Enter a number: "); 
    cout<<"n: "<<n<<endl; 

} 

int read_int(const string& prompt){ 
    cin.exceptions(ios_base::failbit);//Why this line "exceptions" different from the next "exception" 
    int num=0; 
    while(true){ 
     try{ 
      cout<<prompt; 
      cin>>num; 
      return num; 
     }catch(exception ex)// what does "exception" here mean? 
     { 
      cout<<"Bad numeric string--try again\n"; 
      cin.clear(); 
      cin.ignore(); 
     } 
    } 
} 

ответ

1

В cin.exceptions(...), исключения - это имя функции. В частности, this function, который позволяет вам установить новую маску исключения для потока.

В catch(exception ex) исключение - это имя типа. В частности, тип exception, который является базовым типом для исключения. В этом случае это означает, что вы поймаете любое исключение, так как все они должны наследовать от exception.

+1

Спасибо большое! Я, наконец, понял, что исключения - это функция-член класса std :: ios ... Действительно просветил меня. Спасибо!! – Des1gnWizard

+0

Добро пожаловать :) –

+1

Я боролся за эту форму исключений за 5 дней ... И, наконец, к счастью, я случайно увидел главу 29.3 руководства по базовой библиотеке Apache C. В первом предложении говорится: «По умолчанию поток не генерирует никакого исключения» LOL ... тогда я вдруг понял все, cin.exceptions (...) фактически активирует исключения в потоке, или вещи, которые я вводил, будут сохранены в буфер и сделать что-то плохое со следующим вводом (надеюсь, что мое понимание правильное ...). Вздох ... может быть, мне действительно нужно получить полезную книгу, чтобы внимательно изучить ее. , – Des1gnWizard

Смежные вопросы