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

2021-01-20 09:51:40 +08:00
 James369
在写 C++的时候,不小心点进 std 标准库的.h 头文件,只是看了一眼它的源代码。
我去,一堆的 template 操作,一堆的__下划线,一堆的...变参。。。
仿佛进入了另外一个世界,C++的水真深啊。
我想如果看懂 std 源码,我觉得差不多也就学成了吧。
11762 次点击
所在节点    C++
83 条回复
shunia
2021-01-20 11:57:31 +08:00
![比如我用 sublime 打开 libwebp 的情况,相对来说要清晰很多吧?]( https://tva1.sinaimg.cn/large/008eGmZEly1gmu0v44k6rj31d90u0b0c.jpg)
mingl0280
2021-01-20 12:00:46 +08:00
@myid
我想避免满天飞的 void*,所以才用 template 的……
因为以前的代码是 C 升级上来的,真的是满天飞的 unnamed type 和 void*以及各种强制类型转换,这种时候你就知道 C++的带类型和语义化的好处了。
另外,C 风格字符数组这个东西我现在跟我同事说了,不是万不得已不要用,因为有些东西根本不应该被转换为字符数组,而有些东西你用字符数组带来的裸指针的麻烦比用容器更大。
aihimmel
2021-01-20 12:03:24 +08:00
Jirajine
2021-01-20 12:04:22 +08:00
当你对 c++感到蛋疼的时候,去看看 rust,你会发现一个新世界。
Leviathann
2021-01-20 12:28:11 +08:00
@Jirajine 是更蛋疼还是相反。。
e583409
2021-01-20 13:08:57 +08:00
@Jirajine 洗耳恭听
XIVN1987
2021-01-20 13:16:13 +08:00
@Jirajine
语法和 C 、C++、C#、JAVA 这些 C-like 都不一样,,至少从语法上肯定是个新世界
AlohaV2
2021-01-20 13:18:24 +08:00
template 比 macro 绝大多情况下友好多了,相信我。
STL 的作用就是让使用者不必关心这些实现细节,除非使用者要讲究细节。
自己的库封装给用户的时候,不一定 template 就为王,要根据场景而定的。最好的结局是尽管你可能用到了 template,但是用户使用的时候几乎无感。
nightwitch
2021-01-20 13:31:18 +08:00
@myid
在 C++里面 class 和 struct 除了默认的访问和继承权限不一样以及 template class 以外,其他是一个东西
nnqijiu
2021-01-20 13:34:30 +08:00
c 风格和 c++风格混用才是 c++让人蛋疼的地方
nightwitch
2021-01-20 13:37:36 +08:00
https://github.com/electronicarts/EASTL
推荐 EASTL,名字没有混淆过(因为命名空间在 eastl::),虽然不是完整的标准库,但是可读性很好,读起来和普通 c++代码差不多。

其实标准库没有想象的难,因为标准库的实现的东西都有 cppreference 可以参考,各个模块之间耦合也不深,而且可以多个标准库(libc++,libstdc++,msvcSTL)和仿标准库(eastl, folly)交叉验证着读,除了 iostream 之类的糟粕以外,容器和算法读起来都应该不会有太多困难。
wdhwg001
2021-01-20 15:05:29 +08:00
标准库都难读的话 ranges 岂不是更魔法文字…
AndyAO
2021-01-20 15:16:55 +08:00
template 是元编程技术,对于很基础的类库,使用元编程技术能够极大地提升开发效率,但是由于直接对语言本身进行了改动,所以相比起其他的代码,你需要更多的学习才能看懂.

其他语言的类库也会大量的利用元编程技术,例如 Java 的 Spring(反射)和 Ruby on Rails.

当然,如果单纯看元编程的灵活性,在这方面最厉害的是 LISP 以及方言.

以上观点参考自松本行弘的<代码的未来>
neocanable
2021-01-20 15:20:50 +08:00
哎,我觉得我从来就没有学会过 c++
yazinnnn
2021-01-20 15:26:00 +08:00
rust 不是 c-like ?
myid
2021-01-20 15:28:42 +08:00
@abc612008 C++有它的好处。我们不妨取二者最好的部分来用。
myid
2021-01-20 15:30:33 +08:00
@nnqijiu 好奇中。举一个小例子?
@neocanable 你不是一个人在战斗。。。
myid
2021-01-20 15:41:45 +08:00
@XIVN1987 绝大多数 C++书这么讲。我信了,直到动手编写代码到了一定量,遇到坑,才醒悟。别盲目相信书。卖瓜的都说瓜甜,卖风油精的讲治百病。C++标准库里的 std::string, std::set 等不见得符合“简单、直接、齐活”的要求。以前对 c-style char array 很不待见,如今领会到了它存在的理由和价值。好比武器,不一定越高级,功能越齐全,就越好越适合。
l00t
2021-01-20 16:21:33 +08:00
@myid #36 C++ 和 C 揉在一起就是它最坑的部分。
myid
2021-01-20 16:24:23 +08:00
@towry 妙语!赞。

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

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

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

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

© 2021 V2EX