Armadillo库如何处理错误
How does Armadillo library handle error?
刚开始使用Armadillo库。通过文档和FAQ,我没有找到任何关于Armadillo如何处理错误的参考。例如,我如何知道"mat A(1e10, 1e10)"是否成功?
Armadillo的错误处理机制在其文档中并不清楚。通过与作者Sanderson的邮件沟通,了解到Armadillo的错误处理机制实际上是c++ std异常和C风格返回值的混合。但是,文档中关于将抛出什么异常的信息仍然不完整。
例如,要定义一个矩阵,我建议不要使用"mat X(M, N)",因为没有错误处理。安全的方法是这样的(c风格):
mat X;
try{
X.set_size(M, N);
} catch (...) {
printf("memory allocation failedn");
return -1;
}
注意,当内存分配错误发生时,将抛出异常"std::logic_error"或"std::bad_alloc"(参见下面mtall的注释),这不会放在文档中。当返回时,使用"X.reset()"释放数据内存。
和@mtall:我建议对特定领域的新手采取不那么苛刻的态度,对社区健康更好。强迫别人阅读不完整的文档并不是建设性的意见。事实上,大多数好的开源项目的文档都不是很好,这就是为什么我们应该帮助它们变得更清晰和用户友好。
Armadillo文档中的示例:
对于R = chol(X)
和chol(R, X)
函数:如果分解失败,R被重置,chol(X)
抛出std::runtime_error异常,而chol(R,X)
返回bool设置为false。
对于eig_sym(X)
和inv(X)
函数:如果X不是正方形,则抛出std::logic_error异常。
对于+
等操作符,如果使用不兼容的对象大小,则抛出std::logic_error异常。
对于像A(i,j)
这样的元素访问,如果请求的元素越界,则抛出std::logic_error异常。
等等。
Armadillo的源代码也是可用的,因此您可以直接查看它并查看它的功能
- 使用返回对象的函数处理错误
- C++:处理错误,看不懂我的错误
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- C++ 异常处理错误输出
- 信号处理错误
- 文件处理I/O C 错误
- 文件处理 - 错误:与 while 循环 (C++) 中的"运算符>>"不匹配(代码::块)
- SDL的事件处理错误
- HMODULE在重建导入地址表IAT时处理错误
- C++ 中的文件处理错误 - 调用"std::basic_fstream<char, std::char_traits<char> >::open(const char[8],
- 在处理线程时,处理错误的正确方法是什么
- 处理C++错误
- 异常处理C++错误
- CUDA图像处理错误
- 文件处理错误
- 代码::阻止资源预处理错误
- 使用模板创建类的新实例,不知道如何处理错误
- Qt 与 opencv 异常处理错误
- 提升 MSM 中的错误处理错误
- 如何处理错误“vtkTrivialProducer :此数据对象不包含请求的范围”