【问题标题】:Why share the use of the ampersand (&) for both address operator and the reference declarator? [closed]为什么要为地址运算符和引用声明符共享与号 (&) 的使用? [关闭]
【发布时间】:2012-06-04 15:59:50
【问题描述】:

在 C++ 中,和号字符 (&) 可用于获取左值、函数指示符或限定名称的地址。 .

int y;
int* p_to_y = &y;

该字符在 C++ 中作为引用声明符有共同用途。 .

int y;
int& y_alias = y;

在粗略了解C后学习C++时,这种双重用法让我很困惑!我知道使用符号的上下文有很大的不同,但鉴于引用和指针是不应混淆的重要概念,任何人都可以提出为什么 & 被回收而不是使用新的替代符号?

【问题讨论】:

  • -1 & 投票结束,因为没有建设性,除非有人找到了 C++ 原始草案的日志,这只是在猜测或给出你自己的论点(这是有道理的),不是真正的原因(甚至可能是:“为什么,这对我来说很容易,而且我不会使用新符号!”。
  • 在 C 中,* 可用于取消引用指针、声明指针和乘以值。为什么这没有让你感到困惑?
  • C 和 C++ 中有太多事后看来是愚蠢的。我们可能会浪费几个月的时间来研究它。而在这一点上,它完全无关紧要。
  • @interjay - 因为指向和算术运算更容易区分
  • 这里只是一个问题。这就像在问为什么默认函数返回类型是int而不是void,或者为什么有这么多级别的运算符优先级,或者为什么允许嵌套赋值(a = b = c),这导致需要@987654329 @ 以及创建的所有错误,或者为什么同时具有 ++-- 的前缀和后缀形式,或者以空字符结尾的字符串而不是长度字节,这会导致缓冲区溢出并禁止字符串包含任意二进制数据,或者……或者……

标签: c++ pointers reference standards ampersand


【解决方案1】:

首先,别担心,你很快就会克服这种困惑。

可能有多种原因:

  • 从逻辑上讲,它们之间存在某种联系。引用的行为就像一个指针,它是一个对象的地址。

  • 没有很多免费符号。看着我的键盘顶行,我只能看到……嗯,只有$@。我个人也不喜欢,但这可能只是因为我习惯了&

  • 您提供的反理由可以被视为支持理由 - 即不要在语言中添加其他符号。想一想 - C++ 中可用的大多数符号在 C 中也可用。其目的可能是让从 C 迁移的人获得平滑的学习曲线。由于& 在逻辑上与引用的概念相关联,因此它是最合适的。

【讨论】:

  • 感谢您对我认为合理的问题的一个很好的回答(显然社区的其他人认为我想开始某种辩论)。我不再感到困惑,但过去对我来说是一个特别的障碍
  • @learnvst 实际上我碰巧同意,这不是一个真正的建设性问题(至少对于这个网站而言),但我确实觉得它很有趣。以前从未想过。
  • 现在我知道我失踪没有根本原因,我可以看到这个问题可能会引发争论。网上没有容易获得的理由,所以我在这里问了这个问题。看到 CLOSE 锤子落下的速度我很震惊,但至少我现在有了一点线索。 +1 / 接受
【解决方案2】:

谁能说明为什么& 被回收了

因为&yint&在某种程度上都是“关于地址”的:一个创建一个指针,它是内存地址的薄抽象,另一个表示一个引用,它就像一个指针,可以永远不要为空。

【讨论】:

  • 我想知道为什么这被否决了,除了“只有这么多的符号可用”之外,这个答案对我来说似乎非常好。虽然当然引用不是指针,但它们仍然共享大多数属性(并且大部分时间由编译器在内部实现为指针)。
  • 感谢您的回答 +1。这个问题似乎激起了不好的气氛:(
猜你喜欢
  • 1970-01-01
  • 2021-12-16
  • 2023-01-11
  • 1970-01-01
  • 2018-03-27
  • 2012-01-30
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
相关资源
最近更新 更多