给新手 C++ Developer 的 Tips 1

2021-01-12 18:24:14 +08:00
 dorafmon

大家好,我又来安利我的视频了,因为在平时工作 /面试的过程中经常会遇到一些关于 C++的细节,而这些知识点大多散落在各种书 /博客 /github repo 里,所以我想把这些知识总结成每个 10mins 左右的视频,分享给大家,也是我自己对自己知识图谱的一个梳理。我在录这个视频的时候面对的对象人群是 junior C++ developer,想好好准备 C++知识面试,或者是想学习一些跟 C++有关的能应用在工作中的 best practice 。因为我自己在国外,所以有些时候有些中英混杂,实在不好意思。

下面是第一个视频,讲的是关于 C++ exception 的一个小知识点~

C++“博大精深”,我也只是个小学生,难免会出错,还请大家斧正。

也烦请大家 subscribe 我的 youtube 频道: https://www.youtube.com/channel/UCg4d15bORamNqf-fPz9e9aw

视频地址: B 站: https://www.bilibili.com/video/BV1jf4y1y7gc youtube: https://www.youtube.com/watch?v=T5Z2iFHpoy8

1811 次点击
所在节点    推广
8 条回复
wutiantong
2021-01-12 22:10:52 +08:00
没有稿子磕磕绊绊的讲解令人难以忍受。
另外我查了,析构函数是可以抛异常的,即使在 stack unwinding 中也不是未定义行为:

As any other function, a destructor may terminate by throwing an exception (this usually requires it to be explicitly declared noexcept(false)) (since C++11), however if this destructor happens to be called during stack unwinding, std::terminate is called instead.
https://en.cppreference.com/w/cpp/language/destructor
dorafmon
2021-01-12 22:26:43 +08:00
@wutiantong 嗯嗯 下回我争取先写个稿子。 这个我讲了一般是会 terminate 或者是 undefined behavior,effective C++原文也是这么写的。我下回更严谨一点,fact check 一下。
dorafmon
2021-01-12 22:32:05 +08:00
@wutiantong 书里的原文: “Depending on the precise conditions under
which such pairs of simultaneously active exceptions arise, program execution either terminates or yields undefined
behavior”, 考虑到书挺老的确实我应该更严谨一点,但是这个 point 没怎么变,还是不鼓励大家 throw 。
wutiantong
2021-01-13 11:08:23 +08:00
@dorafmon

是有这样的说法,但既然不是 ub 就可以在充分了解的前提下加以利用。

我倒想考考,你能简洁地讲清楚 noexcept 应该怎么写么?
dorafmon
2021-01-13 16:44:38 +08:00
@wutiantong 我做这个视频的只是想给普通的新入行 c++程序员提供一点社区内都知道的常识。所以有些时候有些特殊情况我就没有提,有些特别细节的东西我自己也会有所取舍,我觉得不鼓励大家在 destructor throw exception 其实算是业界的一个普遍看法。

noexcept 这个问题我可能要做点研究才能完整的回答你,但是我目前的看法是不要随便乱加 noexcept,因为这个会成为你 api specification 的一部分,你的 function 以后如果要 throw 的话就意味着你要改变这个 spec,所以在你不是非常确定的情况下暂时不要加 noexcept 。
wutiantong
2021-01-14 14:21:05 +08:00
@dorafmon

这个知识点是没问题的,但你的论述可能是有问题的。

我们在 C++ Core Guidelines 中可以找到关于这个知识点更清晰更正确的论述:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rc-dtor-fail
wutiantong
2021-01-14 14:23:13 +08:00
@dorafmon 你没有认识到 noexcept 这个关键词的设计意图
dorafmon
2021-01-14 17:20:31 +08:00
@wutiantong 嗯嗯,受教了,我再打磨打磨自己。关于这个 noexcept,您能更详细的讲讲么?谢谢!我自己也想学习学习。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744299

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX