Visual c++ 2008中的函数try块
Function try block in Visual C++ 2008
Visual c++ 2008是否支持函数try块内部方法?
我试过这个代码:
class Foo
{
public:
void f()
try {}
catch ( ... ) {}
};
但是编译器打印这个错误:
error c2590: 'f' : only a constructor can have a base/member initializer list
相同的语法(根据标准是有效的)在自由函数中也可以使用。
代码可以在新版本的Visual Studio和gcc上编译。
EDIT:没有,在我的代码中没有打字错误。c++标准说这是一个有效的语法。它叫做"function try block"
EDIT 2:如果我将方法定义移到类定义之外,visual c++ 2008将正确编译。
谢谢。
此特性仅适用于构造函数捕获成员变量内联初始化中的异常,例如:
struct a {
a(const complex_object& value)
: m_var(value)
{}
private:
complex_object m_var;
};
如果在complex_object的复制构造函数中抛出异常,则没有办法处理(除非更改m_var的初始化)。
http://msdn.microsoft.com/en-us/library/e9etx778%28v=vs.90%29.aspx在这种情况下,function-try块用于处理此类异常,保持相同的初始化。
方法f不是类Foo的构造函数。
Daniele是对的Function-Try块可以在方法中使用,但通常这不会改善太多,在这种情况下,最好在方法体中使用try-catch块(允许必要时从catch块返回值)。
VS2008,不是一个专注于c++标准化的版本,VS2010改善了这个问题,但我认为还不够,后来的版本VS2012,特别是VS2013真的越来越接近一致性足够(特别是在日常使用中),他们有一些遗留的老难题,两阶段查找和预处理器,在角落的情况下可以吹你的头脑试图解决,特别处理可移植代码(与GCC, Intel等编译…),
相关文章:
- 是否有理由大多数/所有 try-catch 示例只对 throw 语句使用 void 子函数
- 构造函数中的异常:init() 方法、指针、大型 try/catch 或
- 为什么不使用函数try块声明main()?
- 从catch块调用异常类中的函数并不是打印从try块传递的值
- 处理构造函数C++中的Try-catch块
- 如何使用 try 和 catch 中止函数
- 异常从具有函数 try-block 的构造函数中引发两次
- 构造函数作为函数 try 块 - 异常中止程序
- 我们如何从它的函数 try 处理程序跳回到构造函数体?
- 函数try catch语法和main
- 函数try块的用途是什么
- mfccdatabase::OpenEx函数如何知道它在try/catch块中
- Visual c++ 2008中的函数try块
- 构造函数的function-try-block处理程序中的返回语句
- Try/catch块用于在构造函数内部将简单内存分配到公共原始指针
- 对裸函数使用Try/Catch
- 为什么我们需要一个函数try块
- 非构造函数上的Do function try块有任何缺点
- 通过模板元编程用try包装任意函数调用.catch块在现代c++中
- 为什么lambda没有函数try块