2016-06-25 3 views
0

Я только что заметил что-то, и я думаю, что это довольно странно. Это не очень важно, но это привлекает мое любопытство.C++: Throw Исключение странное поведение?

Представьте, что вы объявляете класс:

class myException : public std::exception 
{ 
    /*do stuff*/ 
} myExep; 

Я просто заметил, что всякий раз, когда вы бросаете это исключение, что вам нужно сделать это по-разному в зависимости от того, используете ли вы myException или myExep:

try 
{ 
    if (/*whatever*/) 
     throw myException(); 
} 

или :

try 
{ 
    if (/*whatever*/) 
     throw myExep; 
} 

Я не понимаю, почему вам нужно () в одном случае, а не в другом. Я использую clang ++ как компилятор, не знаю, имеет ли он какое-либо отношение к нему. Я использую -Wall -Werror -Wextra флаги.

Это не очень важно, я просто хочу понять, что на самом деле происходит.

+1

myException - это тип, myExcept - это объект. – Mat

+0

Ммм, я такая глупая? Я действительно думал, что это похоже на typedef, когда вы делаете это с классом. Итак, вы можете намереваться объект таким образом? Thx для быстрого ответа. –

ответ

3
class Foo { 
    ... 
} bar; 

просто короткий путь написания

class Foo { 
    ... 
}; 
Foo bar; 

Вы также можете использовать этот синтаксис, не давая типа имя:

struct { 
    int x, y; 
} p; 
// p is an object with p.x and p.y fields 

В вашем примере, myException тип в то время как myExp - (предположительно глобальный) объект.

+0

Thx man, я не знаю, почему я действительно думал, что это похоже на typedef, теперь он чувствует, спасибо :) –

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