Dav*_*ian 44 c++ exception try-catch language-lawyer
例如:
if (true) try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
换句话说,将if -block放在if条件之后是否合法?
Moh*_*ain 77
try块的语法(在C++中是一个语句)是
try compound-statement handler-sequence
Run Code Online (Sandbox Code Playgroud)
语法if是:
attr(optional) if ( condition ) statement_true
attr(optional) if ( condition ) statement_true else statement_false
Run Code Online (Sandbox Code Playgroud)
哪里:
statement-true- 任何语句(通常是复合语句),如果条件求值为true则执行
statement-false- 任何语句(通常是复合语句),如果条件求值为false则执行
所以,是的,您的代码是合法代码C++.
statement_true在你的情况下是一个try块.
在合法性方面,它类似于:
if (condition) for(...) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是你的代码不是很易读,并且在else添加时可能会成为一些C++陷阱的牺牲品.因此,建议增加明确{...}后,if你的情况.
son*_*yao 40
将if-block放在if条件之后是否合法?
这是合法的.你的代码与(和写作更好)相同:
if (true) {
try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果条件是false那么try-catch块将不会被执行.如果这是你所期望的,那很好.
Lig*_*ica 22
是.一个大括号if是可选的.想象一下你{}周围的人try { .. } catch { .. }.
你可能会感兴趣的是,当你写if/ else if/ 时会发生这种情况else; C++实际上没有else if......所以这个:
if (A) {
}
else if (B) {
}
Run Code Online (Sandbox Code Playgroud)
实际上解析为:
if (A) {
}
else
if (B) {
}
Run Code Online (Sandbox Code Playgroud)
这是这样的:
if (A) {
}
else {
if (B) {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5997 次 |
| 最近记录: |