"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs
de compiler kan dan aan de hand van dat gegeven bepaalde dingen optimisen, omdat hij weet dat er geen exception gegooid zal worden
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik ging even kijken in de msdn, en zag dit staan
1
2
3
4
5
6
7
8
9
10
11
12
13
| Microsoft Specific _bstr_t( ) throw( ); _bstr_t( const _bstr_t& s1 ) throw( ); _bstr_t( const char* s2 ) throw( _com_error ); _bstr_t( const wchar_t* s3 ) throw( _com_error ); _bstr_t( const _variant_t& var ) throw ( _com_error ); _bstr_t( BSTR bstr, bool fCopy ) throw ( _com_error ); |
Dan zou je juist zeggen dat hij toch wel een heleboel error's juist wel kan throwen
Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P
Er wordt juist wel een exception gegooid... of is het juist datOp donderdag 06 juni 2002 17:13 schreef .oisyn het volgende:
dat wil zeggen dat die functie geen exceptie gooit
de compiler kan dan aan de hand van dat gegeven bepaalde dingen optimisen, omdat hij weet dat er geen exception gegooid zal worden
1
| _bstr_t() throw(); |
geen exception gooit en een statement als
1
| _bstr_t(const char* s) throw(_com_error); |
weer wel?
Dus eigenlijk komt het gewoon neer op 'good practice' dan?
-Edit-
Het is eigenlijk 'kan gooien'
"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs
Als er dus niets tussen de haakjes staat kan er ook niets worden gegooid
zie ook punt 15.4 van de ANSI C++ draft
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Microsoft Specific ?>
Microsoft C++ does not support the function exception specification mechanism, as described in section 15.4 of the ANSI C++ draft.
END Microsoft Specific
Vandaar dat ik ook niet echt begreep wat het nut was, aangezien het gewoon wordt genegeerd.
'k had een test functie gemaakt:
1
| void DoTest() const throw( int); |
Maar ik kan gewoon een string gooien. Als ik het goed begrijp zou dit volgens de ANSI standaard dus niet kunnen..?
"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs
ik wist wel dat ms het niet ondersteunde, daarom vond ik het ook een beetje vaag dat het in een COM object was gedefinieerd...
maar dat _bstr_t ook MS is en dat ze dan die syntax gebruiken is natuurlijk
.edit:
compilet dat dan?code:
1 void DoTest() const throw( int);
Maar ik kan gewoon een string gooien. Als ik het goed begrijp zou dit volgens de ANSI standaard dus niet kunnen..?
volgens mij krijg ik een syntax error als ik het door de compiler gooi...
als het wel compilet is het natuurlijk wel logisch dat ze de throw syntax gebruiken, zij het voor future support (fat chance
.edit2: je hebt gelijk, het compilet idd wel gewoon...
wat probeerde ik dan laatst dat niet werkte maar wel correct was volgens de standaard
.edit3: oh ja een try-catch clause voor base en member constructors:
1
2
3
4
5
6
7
| Klasse::Klasse () try : membervar (4)
{
...
}
catch (exception e)
{
} |
dat compilet dus niet in MSVC6
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Wist niet eens dat zo iets ooit zou kunnen.Op donderdag 06 juni 2002 17:33 schreef .oisyn het volgende:
code:
1 2 3 4 5 6 7Klasse::Klasse () try : membervar (4) { ... } catch (exception e) { }
dat compilet dus niet in MSVC6
Ik had het dan als volgt gedaan:
1
2
3
4
5
6
7
8
9
10
| Klasse::Klasse()
{
try
{
membervar = 4;
}
catch( exception &e)
{
}
} |
Heeft de ANSI methode een duidelijk voordeel of is het dan een kwestie van stijl?
"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs
bijvoorbeeld:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| class Blaat
{
public:
Blaat (int i);
};
class Klasse
{
public:
Blaat membervar;
Klasse ();
};
// normale initialisatie zou zo moeten:
Klasse::Klasse () : membervar (4)
{
}
// want dit is fout:
Klasse::Klasse ()
{
membervar = 4;
}
// dus als je de exception wilt afvangen:
Klasse::Klasse () try : membervar (4)
{
}
catch (exception e)
{
} |
verhaaltje geldt natuurlijk ook als het geen member variabele betreft maar een superclass
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs