Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与C+一起工作+;不使用';你不支持例外吗? 我用一个基本上是ARMCC的宿主来将C++库移植到我的MPRE,它的配置是你不能真正改变的。他们决定的配置选项之一(出于未知原因)是不支持异常。因此,抛出和捕获将产生编译器错误 你如何能正确使用标准C++库?我在我的库中使用了一些向量。我如何知道推回功能是否实际成功?是否有任何标准方法可以知道是否发生异常,或者它只是执行退出(1)或其他操作?_C++_Exception_Compiler Construction_Armcc - Fatal编程技术网

与C+一起工作+;不使用';你不支持例外吗? 我用一个基本上是ARMCC的宿主来将C++库移植到我的MPRE,它的配置是你不能真正改变的。他们决定的配置选项之一(出于未知原因)是不支持异常。因此,抛出和捕获将产生编译器错误 你如何能正确使用标准C++库?我在我的库中使用了一些向量。我如何知道推回功能是否实际成功?是否有任何标准方法可以知道是否发生异常,或者它只是执行退出(1)或其他操作?

与C+一起工作+;不使用';你不支持例外吗? 我用一个基本上是ARMCC的宿主来将C++库移植到我的MPRE,它的配置是你不能真正改变的。他们决定的配置选项之一(出于未知原因)是不支持异常。因此,抛出和捕获将产生编译器错误 你如何能正确使用标准C++库?我在我的库中使用了一些向量。我如何知道推回功能是否实际成功?是否有任何标准方法可以知道是否发生异常,或者它只是执行退出(1)或其他操作?,c++,exception,compiler-construction,armcc,C++,Exception,Compiler Construction,Armcc,他们解释了为什么不支持该操作: 传统智慧(以及来自armcc编译器的建议) 异常的开销相当高,因此不是很高 适用于此类域。就目前而言,我们并非如此 支持异常(很难删除支持,但很容易添加 它) 我们一定要看真正理解空间和时间 某种程度上的开销(mbed不是很传统,所以可能 例外是完美的!),但现在你必须坚持更多 传统的异常处理方法 以及: 我们不支持编译器中的异常处理,它也不支持 计划添加它。但我很高兴听到你通常如何使用 它们在你的微控制器应用程序中,或在你的体验中!但是 现在,您必须转向更标准的

他们解释了为什么不支持该操作:

传统智慧(以及来自armcc编译器的建议) 异常的开销相当高,因此不是很高 适用于此类域。就目前而言,我们并非如此 支持异常(很难删除支持,但很容易添加 它)

我们一定要看真正理解空间和时间 某种程度上的开销(mbed不是很传统,所以可能 例外是完美的!),但现在你必须坚持更多 传统的异常处理方法

以及:

我们不支持编译器中的异常处理,它也不支持 计划添加它。但我很高兴听到你通常如何使用 它们在你的微控制器应用程序中,或在你的体验中!但是 现在,您必须转向更标准的C解决方案

基于这一点,我可以猜测异常情况最终会出现在
std::terminate()

<>我不认为支持异常是C++语言中的一个合法选择。因此,您应该做一个实验,看看当
new
push_back()
失败时会发生什么,或者询问编译器后面的人员

<>你如何能正确使用标准C++库?我 使用我的库中的一些向量。我怎么知道是不是推回了 功能实际成功了吗?有没有标准的方法可以知道 发生异常,或者只是执行退出(1)或其他操作

当你禁用C++中的异常处理时,你就冒险进入非常限制性的领域。 一些标准库实现,比如Dinkumware,允许禁用异常。这是一个定义宏的问题,_有_异常,如0。STLPort有一个类似的约定_STLP_USE_EXCEPTIONS=0

但是,对于禁用异常时标准库应该做什么,没有标准定义。异常处理,在很大程度上,是根深蒂固的C++语言。默认情况下,即使是
dynamic_cast
operator new/new[]
抛出,这些都不是库功能

即使对于不抛出的标准库实现,也缺乏对应该发生什么的明确定义。如果一个序列
push_back
在为该序列分配更多内存的过程中抛出,会发生什么?元素是否只是没有插入?这些序列的标准接口肯定不会告诉我们什么时候会发生这样的错误

此外,很多C++库一般都会使用像运算符new(而不是NoFrpices版本)这样抛出的函数。因此,一旦我们禁用异常,我们就会冒险进入许多未定义的行为领域

我曾在一家公司中工作,禁止公司进行异常处理,因为高级程序员是一个早熟的优化器,他们喜欢C,认为C++是非常糟糕的,效率很低。(巧合的是,他们编写了团队中最低效的代码,强烈倾向于将链表作为默认容器,这导致分析热点显示在左侧和右侧,这是由于为所有内容分配/释放的微小节点数量太多,但这是另一种情况)

嵌入式系统中,对异常处理的论证可能会更强一些,但一般来说,没有它就难以依赖C++。我认为,最好的方法是不受异常处理,接受一个残缺的C++形式,而不需要大量的标准库部件,除非您想花很多时间来尝试。o找到特定标准库供应商特有的解决方法和技巧,这可能会带来更多麻烦。

可能重复使用