再一次感觉到 C++的恶心

19 天前
 moudy

static EntryType Graph::getEntryPoint() { return "_start"; }

void MyClass::init(Graph &g) { const EntryType entry = Graph::getEntryPoint(); }

这么简单的一段程序,调试时看 entry 的值,里面存的东西跟"_start"半毛钱关系都没有。 因为"_start"传出去时隐式 cast 成 EntryType ,然后 EntryType 实现的转换操作里做了一堆骚操作。

4866 次点击
所在节点    C++
40 条回复
carlself
19 天前
<amp-youtube data-videoid="7fGB-hjc2Gc" layout="responsive" width="480" height="270"></amp-youtube>&t=99s 看看这个视频解压一下,喷了两个小时 C++
aloxaf
18 天前
@carlself 好家伙,两个小时,这作者对 C++ 是真爱啊😆
yolee599
18 天前
我就是能用 C 就不用 C++
songray
18 天前
@carlself 这个视频我完整的看完了...
最搞的是,从 GitHub 主页来看,这作者真的是 C++ 的高级开发,吐槽的也都在点子上。

看完后我的看法是,越 modern 越复杂,越 modern 越不好用,不如 C with class (
vfs
18 天前
"然后 EntryType 实现的转换操作里做了一堆骚操作": 所以还是实现 EntryType 的人的问题么。 你 hold 不住就不要用这么高级的特性么,当作 c with class 来写不就可以了么
xdeng
18 天前
C++ 越来越看不懂,语法越新越看不懂,学学 go 吧
jeffw
18 天前
重载了等号操作符?感觉没啥毛病
levelworm
18 天前
我只会写 C+class 。最爽的是用 std::unordered_map
dandeli0n
18 天前
其实编程语言的隐式转换都是坑,不信你看一下 js
whenov
18 天前
这不是应该看 EntryType 的构造函数吗
allentsau
18 天前
C11
jqknono
18 天前
写了十几年 c++, 仍然觉得恶心, c++本身语法就繁杂, 那种很简洁的 c++只存在于各种书本里. 实际上的代码五花八门. 而且经常不得不去学习 cmake,makefile,gcc,gdb,microcode, 这里边每一个都很恶心, 宏也非常恶心. 总之它可能本身可以写的很优雅, 但是它允许各路人马以各种恶心的方式完成工作, 最气人的是没 bug 能跑, 就是人很难直接看懂. 可以说是一门标准的安卓语言.
zhouyin
18 天前
@jqknono
待遇咋样?
我十几年前还看过 c++作者吹嘘维护 cpp 代码 待遇高
cbythe434
18 天前
php 是世界上最好的语言
givenge
18 天前
daokedao
18 天前
Rust 现在怎么样了?要不要转 Rust ?或者 Mojo ?
chutianyao
18 天前
这不是你自己的问题么

static EntryType Graph::getEntryPoint() { return "_start"; }

函数返回的"_start"是 String 类型, 你又声明需要 EntryType 类型, 自然就做了隐式转换.
就像楼上说的, 你的 EntryType 如果有 String 类型的构造函数, 自然就能编译通过(转换成 EntryType 类型); 如果不支持, 编译失败你都没机会跑这段代码.

大概率就是你的 EntryType 构造函数瞎搞, 鬼知道他会把 String 类型的值转换成啥
Tomfe
18 天前
@levelworm 做硬件的吗
Zenon
18 天前
不懂,这不是很合理吗
moudy
18 天前
@chutianyao 这是别人写的代码。如果 c++要求写 return EntryType("_start"); 用户起码知道这里可能会有坑。

还有代码写 result = xxxx(); if(result.second) result->second(); 你问这俩 second 有啥区别,呵呵,->被重载了,你猜去吧。

代码光读是没用的,每个符号都 tm 可能是别的意思。挂着 debugger 一层一层往里跟进,就跟解剖一具尸体看肠子里吃的是啥一样。

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

https://ex.noerr.eu.org/t/1175298

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

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

© 2021 V2EX