Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >异常处理需要面向对象的编程吗?

异常处理需要面向对象的编程吗?
EN

Stack Overflow用户
提问于 2011-12-20 10:00:44
回答 9查看 2.6K关注 0票数 41

在我的编程经验中,我意识到在今天使用的大多数语言(C++、.Net、Java等)中使用异常处理是多么的糟糕,至少与C相比是如此。我正准备参加一个高级C课程,并让我将这些术语与我目前的范式进行比较。

在C中,首先要由程序员来防止错误发生,这对于任何习惯于异常处理的人来说都是相当令人畏惧的。我曾经想到过,我遇到的任何语言都有异常处理,而这些语言恰好是面向对象的。至少据我所知,第一个具有异常处理的面向对象语言是C++,它是C的一种进化(如果我错了,请纠正我)。

尽管如此,是否对一种允许异常处理的语言的面向对象特性有什么看法,或者异常处理作为一种特性添加到面向对象语言中是否已经开始成为一种普遍现象?在机器代码中,为什么C缺少这样的说法,C++,使超负荷工作?

我找到了这个关于异常处理在幕后是如何工作的帖子,但不确定该信息如何适用于我的问题(即,C是否缺少通知、延续等?)。提前谢谢。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-12-20 10:09:40

C在机器代码中什么都不缺,异常处理在setjmplongjmp的C中也很常见。

完全缺乏纯过程语言中的语言级特性的原因是,当不需要调用析构函数时,异常处理与setjmp完全相同。异常处理以前在异国语言中已经出现过,但是从来没有流行过,因为它纯粹是语法上的糖。然而,一旦析构函数进入场景,堆栈展开变得必要,语言级别的支持就变得必要,异常处理作为语言的一部分得到了广泛的实现。

票数 20
EN

Stack Overflow用户

发布于 2011-12-20 10:56:06

异常处理需要面向对象的编程吗?

不是的。两者是完全分开的。您可以使用没有异常处理作为控制流基元的OO语言,也可以在非OO语言中进行异常处理。

维基百科很有帮助地指出,面向对象的编程是一种编程风格,它强调了encapsulation,抽象、消息传递模块化、和继承的价值,以便实现低成本的代码重用和对大型团队实施的复杂软件项目的有效管理。

您不会在列表中看到“循环”或"if语句“或"goto”或“尝试捕获-最终抛出”,因为控制流原语与抽象、封装、消息传递、模块化、多态或继承无关,用于实现低成本的代码重用或大型团队对复杂软件项目的有效管理。

在使异常正常工作的机器代码中,C++是什么意思?

当然,现代硬件是以异常处理作为控制流原语来设计的。在现代硬件存在之前很久就设计了C,这将使在C中实现异常处理变得更加困难,因为C可以在所有运行C的硬件上高效地运行。

但是,没有什么可以阻止您或其他人设计一个新版本的C,它将异常处理作为一个控制流基元,但是没有C++的所有其他特性。

如果您对如何向支持延续的非OO语言添加异常处理这一主题感兴趣,请参阅我关于概述该主题的文章:

http://blogs.msdn.com/b/ericlippert/archive/2010/10/22/continuation-passing-style-revisited-part-two-handwaving-about-control-flow.aspx

票数 15
EN

Stack Overflow用户

发布于 2011-12-20 10:08:08

话虽如此,语言的面向对象特性是否允许异常处理,或者作为面向对象语言的特性添加的异常处理是否真的开始成为一种常见的

在90年代初,当我不得不学习Ada (学习CS)时,我第一次了解了例外情况。Ada有一种特殊类型的Exception。当时,它不是一种面向对象的语言。(Ada95添加了一些面向对象的概念。)但是,我同意堆栈展开(即对分配的资源进行完全自动清理)是异常处理成功的一个重要特征。将析构函数与异常处理相结合是C++中异常成功的一个重要方面。

我似乎还记得Stroustrup提到Ada是C++中异常处理的主要影响因素。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8579836

复制
相关文章
Python - 从字典列表中删除字典
字典是python的一个非常常用的功能,用于根据用户需要在其中存储数据。另一个典型的过程涉及编辑或操作此数据。要成为一名高效且快速的程序员,您必须弄清楚如何从字典列表中删除字典。有许多技术可以从词典列表中删除字典,本文将介绍这些技术。
很酷的站长
2023/08/11
3010
Python - 从字典列表中删除字典
【Python】字典 dict ② ( 字典常用操作 | 字典 新增 / 更新 键值对元素 | 字典 删除 键值对元素 | 字典 清空 键值对元素 )
上面的语法 , 就是向 字典变量 中添加新的 键值对元素 键Key: 值Value ;
韩曙亮
2023/10/11
3440
如何使用Cook创建复杂的密码字典列表
Cook是一款功能强大的字典生成工具,该工具可以通过创建单词的排列和组合以生成复杂的字典和密码。Cook可以使用一系列预定于前缀、后缀、单词和模式来创建复杂的节点、字典和密码。
FB客服
2021/07/02
4K0
列表:创建列表
列表是Tcl语言中最重要的一种数据结构。什么是列表?列表是元素的有序集合,各个元素可以包含任何字符串,例如空格,反斜杠,换行符等。列表表现为特定结构的字符串,这意味着可以把它们赋值给一个变量,可以把它们做为参数传给命令,可以把它们嵌套到其他列表中。
Lauren的FPGA
2019/10/30
2.4K0
React 列表、键值与表单
例子中使用map方法将每个元素的值*2,最后得到的数组为:[2, 4, 6, 8, 10]。在React中,处理组件数组的方式与之类似。
随风溜达的向日葵
2018/08/01
2K0
python对列表中的字典按[key]时间排序
在翻看之前的一些面试题,发现其中有一个问题就是对列表中的字典按照某个key进行排序,题目是这样的:
the5fire
2019/02/28
5.8K0
22.Python对列表与字典的迭代
在Python中只要是可迭代对象,都可以通过for循环进行遍历。列表与字典都是可迭代对象,所以都可以通过for进行遍历。 1.列表的遍历
用户4381798
2020/07/30
1.9K0
python中列表排序,字典排序,列表中的字典排序
key= lambda dict1:dict1[0] #dict1[0]表示按键,dict1[1]表示按值。
用户8346838
2021/03/10
9.1K0
【Python】对字典列表进行去重追加
将M去重后的字典放入列表X中,得到X = [{dict1}, {dict2},{dict3}, {dict4}]
py3study
2020/01/07
1.9K0
使用 Python 删除大于特定值的列表元素
Lambda 函数,通常称为“匿名函数”,与普通的 Python 函数相同,只是它可以在没有名称的情况下定义。def 关键字用于定义普通函数,而 lambda 关键字用于定义匿名函数。但是,它们仅限于单一的表达方式。与常规函数一样,它们可以接受多个参数。
很酷的站长
2023/02/23
10.7K0
使用 Python 删除大于特定值的列表元素
0428(字典,列表,循环)
该字典应包含键first_name 、last_name 、age 和city 。通过循环录入3个学生信息,存储到列表中, 并使用循环完成每个人具体信息的打印
py3study
2020/01/16
1.6K0
列表,元祖,字典小记
1,建立列表,列表的元素可以包含任何数数据类型,可以是数字,字符串,列表,元组,字典,集合和布尔值
py3study
2020/01/19
7680
列表,元祖,字典小记
python列表、元组、字典
列表是由一序列特定顺序排列的元素组成的。可以把字符串,数字,字典等都可以任何东西加入到列表中,列表中的元素之间没有任何关系。列表也是自带下标的,默认也还是从0开始。列表常用方括号表示,即:[],元素用逗号隔开。
py3study
2020/01/15
1.2K0
python 使用列表和字典存储信息
"""     作者:白     时间:2018年1月9日     需求:假设你很多汽车,通过不断询问您是否要将车辆添加到您的库存中,     如果您这样做,那么它将会询问汽车的细节。如果没有,应用程
py3study
2020/01/10
1.1K0
Python-字典:键值对的魔法世界
在Python中,字典(Dictionary)是一种强大且常用的数据结构,它允许我们存储和组织键值对(Key-Value)数据。与列表和元组不同,字典中的数据是无序的,但每个数据都与一个唯一的键相关联,这使得字典在表示和访问数据时非常高效
用户9006224
2023/10/11
2630
使用 Python 创建使用 for 循环的元组列表
Python 的关键数据结构是列表和元组。元组元素一旦设置,就无法更改。这称为不可变性。但是列表元素可以在初始化后修改。在处理需要组合在一起的数据时,for 循环用于创建元组列表。列表比元组更具适应性,因为它们能够被修改。本教程演示如何使用 for 循环创建元组列表,从而简化重复性任务。
很酷的站长
2023/08/11
4060
使用 Python 创建使用 for 循环的元组列表
Python的字典与散列表
说明: 本文是上一篇《Python的可散列对象》的续篇,两者都是对《Python大学实用教程》和《跟老齐学Python:轻松入门》有关字典内容的进阶知识。
老齐
2021/03/11
4.7K0
Python列表、元组、字典操作
#!/usr/bin/python # -*- coding: UTF-8 -*- list1 = [1,2,'a', 'b'] seq = (1,4,5) print list1[2] #获取第三个元素(下标是从0开始) print list1[-3] #获取倒数第三个元素 print list1[2:] #获取第三个元素到最后一个 print len(list1) #获取列表元素个数 print max(list1) #获取最大的元素 print min(list1) #
苦咖啡
2018/04/28
1.7K0
python之列表、元组、字典
3 深拷贝和浅拷贝 1 浅拷贝: 当列表中存在有个列表时,其修改这个列表中列表的某一个元素时,其他被拷贝的列表中的对应元素也将被拷贝,其在拷贝这个列表中的列表时,拷贝的是这个内嵌列表的内存位置。
py3study
2020/01/14
2.8K0
python 字典、列表、json转换
#!/usr/bin/python3   import json      #python字典类型转换为json对象   data = {       'id' : 1,       'name' : 'test1',       'age' : '1'   }   data2 = [{       'id' : 1,       'name' : 'test1',       'age' : '1'   },{       'id' : 2,       'name' : 'test2',       '
一朵灼灼华
2022/08/05
1.4K0

相似问题

列表理解-尝试从键值对数组创建字典

514

使用列表理解从字典中创建字典列表

11

如何使用理解将列表项转换为字典键值对

20

创建具有多个键值对的字典列表

34

从字典列表中删除键值对

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文