C++标准库 std 里面简直就是另外一个世界

2021-01-20 09:51:40 +08:00
 James369
在写 C++的时候,不小心点进 std 标准库的.h 头文件,只是看了一眼它的源代码。
我去,一堆的 template 操作,一堆的__下划线,一堆的...变参。。。
仿佛进入了另外一个世界,C++的水真深啊。
我想如果看懂 std 源码,我觉得差不多也就学成了吧。
11762 次点击
所在节点    C++
83 条回复
laminux29
2021-01-21 10:03:57 +08:00
@codyfeng vector 在有些情况下,会自作主张调用析构函数。
12101111
2021-01-21 10:17:01 +08:00
@ipwx rust? macro_rules! #[proc_macro]
429839446
2021-01-21 10:21:44 +08:00
@nightwitch 在 ms 的系统里会影响 abi, 混用 clang 会出警告..
codyfeng
2021-01-21 10:38:51 +08:00
@laminux29 原来如此,vector resize 需要重新分配空间的时候的确会发生这种情况。可以如此解决
1 、实现 move constructor
2 、往 vector 塞东西前 reserve

这个不能怪 vector,即使自己管理内存,需要重新分配空间时也有同样的问题。
hobochen
2021-01-21 11:32:36 +08:00
@ipwx 话得反过来说才对,C++是零开销语言里面抽象能力最强的;更强大的抽象能力还是得看看 functional 的那一大堆
siyemiaokube
2021-01-21 11:37:45 +08:00
@hobochen
个人感觉 cpp 现在已经非常 functional 了……
nmap
2021-01-21 11:40:37 +08:00
做基础库( stl/boost 等)的人,跟做应用开发的人,不是一个 level 的。。。
fixend
2021-01-21 11:45:15 +08:00
vs 的 stl 的代码风格看起来是很难理解,
总感觉那代码是做过代码混淆的,为了防止别人抄袭,
我没记错的话,这库是微软买的。

应该看 clang 的 stl 库,清晰不少。

然后,boost 库才是真会看得怀疑人生,各种模板技巧,大量 N 层嵌套的宏。
togou
2021-01-21 12:09:59 +08:00
委员会那帮人 C++ 差不行么? 不说精通 比大部分专家 怕是要好吧
hobochen
2021-01-21 13:38:45 +08:00
@siyemiaokube 没反射(甚至连编译器反射都没有)怎么和那些 type as data 的语言比啊
hobochen
2021-01-21 13:39:03 +08:00
@hobochen 编译期
ipwx
2021-01-21 14:09:08 +08:00
@hobochen 你说得对
@12101111 rust 也行嘛,是我孤陋寡闻了。
stevefan1999
2021-01-21 17:00:43 +08:00
@ipwx Rust
dyv9
2021-01-21 17:11:57 +08:00
@shunia 你觉得作者和你用的是一样的 开发工具?太天真了吧。指不定人家的工具自动化水平非常高,写两段伪码剩下的自动翻译成源代码呢。
dyv9
2021-01-21 17:27:37 +08:00
虽然 我不懂 C++,但我觉得 既然是标准库,一定是一群人讨论后觉得这个方案是适合大部分人,能解决大部分问题的普适方案,如果你的问题很特殊,那我相信你应该已经是专家,知道怎么解决问题,并不必须依赖标准库。
lakehylia
2021-01-21 17:40:33 +08:00
提供出去的接口千万不要用 stl,都是泪。。。
myid
2021-01-21 19:16:49 +08:00
@mxalbert1996 不是 C 风格字符串更易懂,而是当 C 风格字符串就够用了,那么就用不着 std::string 了。当 C 数组就可以了,用不着非得用 std::vector 。

std::string 作为处理字符串的类,横向对比 Python, Java 等类似的实现,就显得很残很废很单薄。是不是?
myid
2021-01-21 19:20:25 +08:00
@SmartKeyerror C++里不使用 C 字符串和 C 风格数组,是一种迷信。
mxalbert1996
2021-01-21 21:46:54 +08:00
@myid 「简单是力量的保证。直白易懂是可持久可维护的护身符。」这是你自己说的,我只能理解为你觉得 C 风格字符串比 std::string 更简单易懂。
ipwx
2021-01-22 09:42:49 +08:00
@owenliang 噗哈哈哈哈。这个比喻

我个人的话:template 不说精通,让我写个 stl 没压力。
机器学习不算大牛,让我推导主流网络结构公式都没压力。我的研究方向是 deep Bayesian network

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

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

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

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

© 2021 V2EX