作者hizuki (真女主角爱与正义的天使)
看板Soft_Job
标题Re: Fw: [问卦] C++到底难学在哪里
时间Mon Mar 13 22:20:49 2023
本来想上班摸鱼回的。我C不敢说记得住标准,至少style没问题,linux kernel也有些提交
meson, cmake都很熟悉。所以编译不是问题。
C++比如说我要return 一个object,要利用RVO要确认几件事?
首先object的class要是movable 的,所以你要实现个移动构造。
然後让经验很老道的人都要编译看看asm,要不要写std.move()
然後这个move constructor就是个很夭寿的东西,为啥要用RVO和move constructor呢?
就是因为不想用raw pointer,好吧这个class的member多半不简单。
可能你们有N个class type的member,你要保证自己没有偷懒,
全部实现好move constructor,不然突然会来一个变copy constructor,
memory用完再释放用fragments 炸死你。
弄了怎麽多,还不如一个raw pointer直接过去。
忘记讲了,如果你要return none value,看看c++导入的union和none vlaue的取代。
当然有人讲smart pointer好好用,问题是你把lvalue reference看成什麽了?
要改的value不会用这个塞parameter?
再扯到rvalue reference的move constructor还是copy constructor。
这边都还没有到他妈的template,我是用的很开心啊。可是事实并没有那麽多
类似的class可用写成个template 或者method变function template。
可是不得不用免得被靠北没有扩展性。
写了几天我觉得glib(gnome)怎麽那麽亲切,罗哩八嗦的Spring(Java)怎麽那麽一致。
除非没有时间限制的task,或者和clang, llvm有关的事情,死也不碰C++。
还有种情况是我故意想用复杂的语法堵人嘴,正常的同事是不想研究C++的,会直接放过。
最近开始学rust希望不要又被雷
--
起初,皇军进占满州, 我没有反对,因为我要去满州捞钱。
接着,皇军发动对支战争, 我没有反对,因为那是支那人自找苦吃。
後来,皇军发动太平洋战争,我没有反对,因为看鬼畜米英四处奔逃出了一口恶气。
以後,鬼畜米英来轰炸, 我全力反对,因为我们台湾是无辜的,这是米英的战争罪行
最後,天皇宣布无条件投降,我没有反对。因为我们台湾人是战胜国国民,
战争责任与我无关,我要有跟战胜国一样的物资配给好赚钱,也不要坐祥瑞回家!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 154.3.4.179 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1678717263.A.48C.html
※ 编辑: hizuki (154.3.4.179 美国), 03/13/2023 22:27:10
1F:推 mmonkeyboyy: 所以functional又兴起了啊03/13 23:28
2F:推 lturtsamuel: rust 一个 destructive move 直接解决这篇提到一半以03/13 23:40
3F:→ lturtsamuel: 上的问题03/13 23:40
另外还有container template,就算是move constructor对非pointer也是有开销的,
可是我又想避免pointer包括smart pointer这就没办法了。
另外shared pointer的开销很可观(因为有lock)
4F:推 michellehot: 高手求教教03/13 23:42
5F:推 bnd0327: rust预设移动语义应该是好很多,但语法也不能说简单 03/14 00:07
6F:推 wulouise: 预设move然後写parser超麻烦...03/14 00:25
7F:→ wulouise: 移动构造跟复制构造可以讲英文吗?... 03/14 00:26
8F:推 Lhmstu: rust最近网路上好多人在说03/14 01:00
※ 编辑: hizuki (154.3.4.179 美国), 03/14/2023 01:09:22
9F:→ a27417332: 怎麽感觉你还真的是写没几天就没碰了 03/14 01:25
周围写的人不多,不过我写是找了c++频道一边写,一边review
实际写的时间大概零零散散加起来有一个月
10F:→ saladim: C++很烂 不过你说的很不到位 不是苹果比苹果 歧视链出现 03/14 02:05
是问哪里难,我就把我用的时候觉得无所适从的地方列出来而已。
※ 编辑: hizuki (192.147.44.15 美国), 03/14/2023 11:01:24
11F:嘘 final01: 你到底有没有想过一个raw能解为何人家要想的那麽复杂? 03/14 19:34
就是避免有的人记不住嘛
12F:→ final01: 你前面讲说自己多厉害,结果见解跟刚学程式的人差不多啊z 03/14 19:35
13F:→ final01: xzd 03/14 19:35
不好意思,那你拿出你的public commit来比比咯,可能你memory比较多
※ 编辑: hizuki (192.147.44.15 美国), 03/15/2023 10:50:27
14F:推 wulouise: 原PO提交commit的id可以提供瞻仰吗? 03/15 12:50
应该可以明白为什麽我在意效能,没有什麽非常令人需要的东西。
0d746d1022c7f83bc297584cb4d456cae4697cbf Gstreamer
0f74ab59ce8712e7e2bb1e4517033328e626b27c linux kernel
※ 编辑: hizuki (192.147.44.15 美国), 03/15/2023 15:35:52
15F:→ legnaleurc: 没有用过pimpl吗? 03/16 00:19
用来简化include速度的吧,或者说用来直接unique ptr transfer?
16F:→ legnaleurc: 不确定这边同时提smart pointer和 l reference 是什麽 03/16 00:21
17F:→ legnaleurc: 意思, 要解决的问题好像不太一样 03/16 00:21
後者的话是可以,但是你要访问一个property就要包包一层
※ 编辑: hizuki (192.147.44.15 美国), 03/16/2023 17:37:13
18F:→ jack7775kimo: pimpl是用来降低dependency(intro. by data members 03/16 20:19
19F:→ jack7775kimo: or #includes) 03/16 20:19
20F:→ legnaleurc: 连dereference都不喜欢那真的是多说无益了, 写C吧 03/16 21:37
我不是反对pointer派,是很多人不喜欢来评价我用smart pointer大法
然後再丢一个feature告诉我你可以不需要用pointer。例子讲正文我提到的东西
※ 编辑: hizuki (192.147.44.15 美国), 03/17/2023 14:53:34
21F:→ legnaleurc: 能接受gobject但是不能接受smart pointer开销 03/17 20:43
22F:→ legnaleurc: 那C++很明显不合你的需求, 写C也很好啊 03/17 20:43
23F:推 leviliang: 血泪推 04/10 09:52