- 主题:P2544R0 C++ exceptions are becoming more and more problemat
www*open-std*org/jtc1/sc22/wg21/docs/papers/2022/p2544r0.html
2022-02-07
c++异常是个失败的设计,这个不用争吵。
--来自微水木3.5.10
--
修改:foliver FROM 39.144.107.*
FROM 39.144.107.*
这篇文章的水平可能还不如版上,说了半天都是脱开使用场景光说exception的消耗,至于反馈链长的问题怎么解决也没提解决方案。而且分析代码性能,不分析机器码也就算了,throw exception的if里,连[[unlikely]]也不加,分那么多thread,也不绑核。这种文章转成中文能被喷死,一变英文就变香饽饽了
--
FROM 115.192.191.*
攻击了半天,说exception是c++ default error handling,这算啥,什么叫c++ default error handling,不让它写return code了还是怎么样,无非就是要求一个expect而已
--
FROM 115.192.191.*
要是分析C++异常存在的问题/缺陷,H.S的p0709r0.pdf里是写得很清楚的。
不过有些问题现在还没人能解决
--
FROM 221.218.161.*
我真没看出异常的好处在哪里。
有人说检测返回值需要些很多 if else,其实这个对异常也一样,当一个函数可能抛出多种异常时,外面如果要捕获,需要很多 catch 分支(如果不用 catch ...),那我觉得还不如对返回值 switch case 呢。
int result = f();
switch result
case:
case:
case:
何况对应 catch ... 用返回值也可以 用 if (result != 0) 得到同样的效果。
简而言之,对于要写很多 if else 来判断返回值的场景,用异常一样要些很多 catch 分支;对于用 catch ... 捕获所有异常的用法,返回值也可以用if (result != 0)这种方式达到效果。
【 在 ziqin 的大作中提到: 】
: 这篇文章的水平可能还不如版上,说了半天都是脱开使用场景光说exception的消耗,至于反馈链长的问题怎么解决也没提解决方案。而且分析代码性能,不分析机器码也就算了,throw exception的if里,连[[unlikely]]也不加,分那么多thread,也不绑核。这种文章转成中文能被喷死,一变英文就变香饽饽了
--
FROM 113.246.192.*
一层调用等效,
多层调用,异常就省心了,不用管到底是哪一层出问题了
底层负责抛异常, 顶层负责报错, 中间层全部只考虑理想情况
最简单的例子 a->b->c->d ... 中间每一节点都要判断null的话很麻烦,
语法糖支持的的话用 a?.b?.c?.d 之类写法, 也要注意不能写少了
捕获异常就简单了
【 在 speedboy2998 的大作中提到: 】
我真没看出异常的好处在哪里。
有人说检测返回值需要些很多 if else,其实这个对异常也一样,当一个函数可能抛出多种异常时,外面如果要捕获,需要很多 catch 分支(如果不用 catch ...),那我觉得还不如对返回值 switch case 呢。
int result = f();
switch result
case:
case:
case:
何况对应 catch ... 用返回值也可以 用 if (result != 0) 得到同样的效果。
简而言之,对于要写很多 if else 来判断返回值的场景,用异常一样要些很多 catch 分支;对于用 catch ... 捕获所有异常的用法,返回值也可以用if (result != 0)这种方式达到效果。
【 在 ziqin 的大作中提到: 】
: 这篇文章的水平可能还不如版上,说了半天都是脱开使用场景光说exception的消耗,至于反馈链长的问题怎么解决也没提解决方案。而且分析代码性能,不分析机器码也就算了,throw exception的if里,连[[unlikely]]也不加,分那么多thread,也不绑核。这种文章转成中文能被喷死,一变英文就变香饽饽了
--
修改:ABCDEFGHJKLM FROM 103.216.43.*
FROM 103.216.43.*
对,我爱异常。
- 来自 水木社区APP v3.5.7
【 在 ABCDEFGHJKLM 的大作中提到: 】
: 一层调用等效,
: 多层调用,异常就省心了,不用管到底是哪一层出问题了
: 底层负责抛异常, 顶层负责报错, 中间层全部只考虑理想情况
--
FROM 182.146.110.*