为什么VC++引入非标准关键字:__leave
Why does VC++ introduce the nonstandard keyword: __leave?
根据MSDN:
__leave语句更有效,因为它不会导致 堆叠展开。
据我了解,也就是说:"这样常见的代码片段很危险!
struct A
{
int* p;
A() : p(new int) {}
~A() { delete p; }
};
void f()
{
__try
{
A a;
... // Doing somthing
if (the thing has gone bad) __leave;
... // Continue
}
__finally
{}
}
在C++项目中完全避免__leave是否是一种最佳实践?
http://msdn.microsoft.com/en-us/library/yb3kz605.aspx
说:
对于C++程序,应使用C++异常处理,而不是结构化异常处理。有关详细信息,请参阅C++语言参考中的异常处理。
编辑:此外,通常最好避免使用编译器特定的功能。
这取决于。 __try
/__finally
是为Win32结构化异常处理而构建的,这与C++结构化异常处理并不完全相同。 如果要编写 Win32 驱动程序,则必须使用 Win32 SEH。 如果没有,我会坚持C++ EH。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 谷歌模拟和覆盖关键字
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- 在 c++ 中正确定义"this"关键字?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- C++ - 为什么这里需要'template'关键字?
- C++函数的关键字?
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- "friend"关键字在C++中是什么意思?
- 声明C++数组(带或不带 "new" 关键字)
- 对齐和对齐的实际用例C++关键字
- 在 c++ 中三元运算符中不允许继续(关键字)吗?
- 考虑到其他好处,关键字'auto'真的有助于简化调试C++吗?
- 在 Objective-C++ -> EXC_BAD_ACCESS Error 中使用"new"关键字