《C++ Primer》关于 reference 和 pointer 部分看的人“生气”

2022-03-15 12:13:14 +08:00
 vcfghtyjc

对 C++一直是一知半解。最近正式的重读《 C++ Primer 》,不知道为什么看到 reference 和 pointer (章节:2.3 )莫名的生气。

不理解当初设计 C++的人多喜欢“&” 和 “*” 这两个符号。为什么不同功能要用同样的符号啊?!"&" 放在定义处代表引用,放到定义过的变量前代表取地址。键盘上那么多符号,就不能换个符号吗?当初大学 C++学的不好这个设计要背一半的锅。😂

7126 次点击
所在节点    C++
64 条回复
Mohanson
2022-03-15 12:16:50 +08:00
学 Rust 吧, 只要键盘上能打出的符号在 Rust 里都被用作 token 了.
yzbythesea
2022-03-15 12:17:29 +08:00
& 是这个变量的地址,* 是这个指针地址里的内容。不太明白“代表引用”的含义,& 在定义处也是取址吧。
learningman
2022-03-15 12:17:50 +08:00
那我就想传个指针,是不是传成指针的引用了多一次操作?
有聪明的啊,Go 加不加*一个语义,去吧(
smallthing
2022-03-15 12:20:54 +08:00
笑死了,根本就是不懂
codehz
2022-03-15 12:24:26 +08:00
(问就是 c 遗产(
因为*已经用来表示指针和解引用了,&已经用来表示取地址了,你还能用别的什么符号来表示引用吗
l00t
2022-03-15 12:28:33 +08:00
这是延续 C 的风格吧, * 本身不也有好几个意思吗? 声明和定义的时候表示指针,实际用的时候表示指针指向。这都是小事了。

extern ,static 那一堆才看着烦。
darklights
2022-03-15 12:30:25 +08:00
相信我,就算换了个符合,大学 C++该学不好的还是学不好。
statumer
2022-03-15 12:31:54 +08:00
等你学深了,就知道 C++ 的引用符号还只是小事
我看楼主应该还没被 glvalue, prvalue, xvalue, lvalue, 右值引用, 引用的 value category 折磨过
dobelee
2022-03-15 12:34:35 +08:00
golang 解君愁。
vcfghtyjc
2022-03-15 12:37:42 +08:00
@statumer 刚看到里面提到 l-value, r-value 。看了两眼就先搁置了。。。
ChaosesIb
2022-03-15 12:38:55 +08:00
这只能说是理解不同,引用参数起的作用类似于传参时自动加&,那么把&加到参数声明处代表自动取址也就很自然了。语言对于引入新符号 /关键字总是保守的,历史包袱很重的 C++就更是这样了。
hhjuteman
2022-03-15 12:42:19 +08:00
就这你就不行了啦?

来一段模版类型推导折叠规则:
T& & => 什么类型?
T& && => 什么类型?
T&& & => 什么类型?
T&& && => 什么类型?


你要是连 reference 的符号都觉得绕,劝你早日放弃 c++。
yulon
2022-03-15 12:42:57 +08:00
你要明白 C 和 C++ 是两个语言,设计引用的时候没有什么特别方便的语法,只能硬性规定声明里的 & 是引用。

C 的声明满足 [左边结果类型,右边表达式] ,右边的所有符号其实是操作符不是修饰符。

C++ 是怎么方便怎么来了,声明里的 & 确实算是修饰符了,还有 using type ,你用 typedef 多重嵌套的函数指针会想死的。
Huelse
2022-03-15 12:45:19 +08:00
个人认为 C++中左右值和转移语义最重要且实用
Kasumi20
2022-03-15 12:46:00 +08:00
不都是指针?引用让程序员减少了一步解引用而已
zvl0reqglvd
2022-03-15 12:46:14 +08:00
初学者还是不要找虐了。。。。
vcfghtyjc
2022-03-15 12:51:55 +08:00
@yulon 感觉这个解释让我比较容易理解。你这里的的左边是这个意思吗?

int [左边] variable_name [右边]

所以当 "&" 在左边时是用来表述类型,当 "&" 在右边时表示操作符(取地址)。
littlewing
2022-03-15 12:56:21 +08:00
@vcfghtyjc 智能指针、右值引用、移动语义、完美转发,这都是现代 C++ 的重要特性,不学这些等于没学现在 C++
littlewing
2022-03-15 12:58:05 +08:00
C++ Primer 那本书不用看得太细,很多地方都太细节了

另外,你要多写写就懂了,光看是不行的

推荐 《 Effective Modern C++》这本书
vcfghtyjc
2022-03-15 12:59:18 +08:00
@littlewing 多谢指出。等我慢慢看。

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

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

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

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

© 2021 V2EX