大家好,我又来安利我的视频了,因为在平时工作 /面试的过程中经常会遇到一些关于 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
1
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 |
2
dorafmon OP @wutiantong 嗯嗯 下回我争取先写个稿子。 这个我讲了一般是会 terminate 或者是 undefined behavior,effective C++原文也是这么写的。我下回更严谨一点,fact check 一下。
|
3
dorafmon OP @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 。 |
4
wutiantong 2021-01-13 11:08:23 +08:00
|
5
dorafmon OP @wutiantong 我做这个视频的只是想给普通的新入行 c++程序员提供一点社区内都知道的常识。所以有些时候有些特殊情况我就没有提,有些特别细节的东西我自己也会有所取舍,我觉得不鼓励大家在 destructor throw exception 其实算是业界的一个普遍看法。
noexcept 这个问题我可能要做点研究才能完整的回答你,但是我目前的看法是不要随便乱加 noexcept,因为这个会成为你 api specification 的一部分,你的 function 以后如果要 throw 的话就意味着你要改变这个 spec,所以在你不是非常确定的情况下暂时不要加 noexcept 。 |
6
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 |
7
wutiantong 2021-01-14 14:23:13 +08:00
@dorafmon 你没有认识到 noexcept 这个关键词的设计意图
|
8
dorafmon OP @wutiantong 嗯嗯,受教了,我再打磨打磨自己。关于这个 noexcept,您能更详细的讲讲么?谢谢!我自己也想学习学习。
|