C++ 的箭头 (->) 运算符的正式名称是啥?

Posted

技术标签:

【中文标题】C++ 的箭头 (->) 运算符的正式名称是啥?【英文标题】:What is the official name of C++'s arrow (->) operator?C++ 的箭头 (->) 运算符的正式名称是什么? 【发布时间】:2010-12-07 12:51:09 【问题描述】:

我总是称它为“箭头操作符”,但我确信它有一个正式的名称。我快速浏览了 C++ 标准,并没有看到它的名称。

【问题讨论】:

在 C99 草案中,我找不到任何提及它的名称。在该文档中它总是被称为“-> 运算符”。 @Mehrdad:在索引中确实称其为“箭头运算符” AndreyT:在索引中,我可以看到“箭头运算符(->)”和“指针运算符(->)” @Mehrdad:嗯,这为我们在 C 中为该运算符提供了一个正式的 (?) 名称 :) (meta) 我们有标签吗? 【参考方案1】:

根据Wikipedia's list of operators in C and C++,它被称为“指针成员”。

但老实说,我一直称它为“箭头”。例如,如果我有代码 a->b,我会将其读作“a arrow b”。

【讨论】:

我在发布问题之前找到了***的文章。尽管它列在表中的“名称”列下,但我倾向于认为这是描述,而不是名称。【参考方案2】:

Bjarne Stroustrup 将其称为“结构指针取消引用”运算符(TC++PL 特别版,第 102 页)。在索引中,他将其称为“成员访问”运算符。

不确定这是否是“官方的”,但毕竟这个人确实写过这种语言。

【讨论】:

我可以确认是这种情况。 (是的,我其实是去The C++ Programming Language Special Edition 看的。) 他没有发明 C,这就是运算符的来源。 asveikau,您的两个陈述都是正确的,但这与问题有什么关系? asveikau:确实如此。但是同一个运算符在不同的语言中可以有不同的名称,即使它是同一件事。问题特别是关于它在 C++ 中的名称。如果有什么答案,那就是。 请注意,TC++PL 书籍不是关于 C++ 语言的正式和/或官方信息来源。 TC++PL 特意编写为更易于初学者使用。在一些主题上,为简单起见,它故意与官方资料相矛盾(即迂腐地说话,包含故意的错误)。 TC++PL 是一本好书,但是从 TC++PL 进入 C++ 的“官方”世界时必须小心。【参考方案3】:

C++ 标准只是将其称为“箭头”(第 5.2.5 节)。

【讨论】:

在 5.2.4 中首次提到,但后来也普遍使用点运算符。【参考方案4】:

这个操作符的正式名称是类成员访问操作符(见5.2.5)。尽管此名称附加到 .-> 运算符,这意味着它更像是一个组名称。 . 在标准文本中也称为点运算符-> 称为箭头运算符

稍后添加: 以上适用于 C++ 标准。 C 标准仅在索引中将 -> 称为 箭头运算符。文档的正文似乎没有使用任何特定名称。

【讨论】:

【参考方案5】:

ISO C 标准将其称为 ->operatormember-access->operator。所以显然它在 C 中没有“官方”名称。

就个人而言,我只是说指针箭头

【讨论】:

【参考方案6】:

它只是一个小点(即不是点)。

【讨论】:

【参考方案7】:

解引用指针

【讨论】:

【参考方案8】:

我听说它提到了几种不同的方式,我从不知道任何一种特别是比另一种更正式。

成员选择运算符 指针解引用运算符 “箭头的东西”

我相信还有其他人。就我个人而言,我不太关心它在书本或官方规范中的名称,而是更关心人们在我提到它时知道我的意思,所以在我看来“arrow thingy”是它的最佳名称,因为它最简单清楚地理解所指的内容。

【讨论】:

【参考方案9】:

这些术语绝不是官方的,但我将点运算符称为直接(类)成员访问运算符,将箭头运算符称为间接(类)成员访问运算符 阐明它们与间接运算符的关系。

【讨论】:

【参考方案10】:

ISO/IEC 9899:1999(C99 标准)的索引具有“箭头运算符”的三个索引条目(在其自身的权利中,在“联合”和“结构”下),并参考第 6.5.2.3 节(结构和联合成员,在 Postfix 运算符一节中)。但是,在第 6.5.2.3 节或标准中除索引之外的任何其他地方都没有提到“箭头”(“箭头”的所有其他外观都是“窄”的一部分或窄的派生词)。

因此,Arrow 在 C 标准中得到了半官方认可(尽管该索引不是规范或标准设置)。

【讨论】:

【参考方案11】:

最近有一个关于操作符在上下文中如何“发音”的问题。 考虑在上下文中发音为“times”的乘法运算符。

我认为两个成员访问运算符 . -> 表示所有格,所以我将它们发音为宾语的所有格。

例如... fido->衣领() ...会读作“fido 的项圈”。

另一方面,占有不适合动词,所以... fido->运行() ...将发音为“fido runs”。

【讨论】:

这是题外话:OP询问该符号的名称,并且已经提供了引用C ++标准的答案。如果还有关于符号发音的其他问题,您应该在此处而不是此处发表评论。

以上是关于C++ 的箭头 (->) 运算符的正式名称是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++中不可重载5个运算符

什么是“->”PHP 运算符? [关闭]

C ++取消引用和使用点运算符与使用箭头运算符之间有区别[重复]

我可以使用啥来代替箭头运算符`->`?

Java 中的箭头运算符“->”有啥作用?

在c或c ++中通过结构对象变量创建树的点运算符和箭头运算符之间的区别[重复]