gpt4 book ai didi

c++ - 在 C++ 中什么时候使用点、箭头或双冒号来引用类的成员?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:29 24 4
gpt4 key购买 nike

从其他 C 派生语言(如 Java 或 C#)到 C++,起初非常令人困惑的是 C++ 具有三种引用类成员的方法:a::ba.ba->b。我什么时候使用这些运算符中的哪一个?

<子>_(注意:这是 [Stack Overflow 的 C++ 常见问题解答](https://stackoverflow.com/questions/tagged/c++-faq) 的一个条目。如果您想批评以这种形式提供常见问题解答的想法,然后 [开始这一切的 meta 上的帖子](https://meta.stackexchange.com/questions/68647/setting-up-a-faq-for-the-c-tag) 将是这样做的地方. 该问题的答案在 [C++ 聊天室](https://chat.stackoverflow.com/rooms/10/c-lounge) 中进行监控,FAQ 的想法最初就是从这里开始的,因此您的答案很有可能被提出这个想法的人阅读。)_

最佳答案

C++ 用于访问类或类对象成员的三个不同运算符,即双冒号 :: , 点 . , 和箭头 -> , 用于三种始终明确定义的不同场景。了解这一点可以让您立即了解很多关于 a 的信息和 b只需查看 a::b , a.b , 或 a->b ,分别在您查看的任何代码中。

  1. a::b仅在 b 时使用是类(或 namespace )的成员 a .也就是说,在这种情况下 a将始终是类(或命名空间)的名称。

  2. a.b仅在 b 时使用是对象的成员(或对对象的引用)a .所以对于 a.b , a将始终是类的实际对象(或对对象的引用)。

  3. a->b最初是 (*a).b 的简写符号.然而,->是唯一可以重载的成员访问运算符,所以如果 a是重载 operator-> 的类的对象(常见的此类类型是智能指针和迭代器),那么其含义就是类设计者实现的。总结:与a->b , 如果 a是一个指针,b将对象指针的成员 a指的是。但是,如果 a是重载此运算符的类的对象,然后是重载的运算符函数 operator->()被调用。


小字:

  • 在 C++ 中,类型声明为 class , struct , 或 union被认为是“类类型”。所以上面提到的都是他们三个。
  • 从语义上讲,引用是对象的别名,因此我也应该在 #3 中添加“或对指针的引用”。但是,我认为这会带来更多困惑而不是帮助,因为很少使用对指针 (T*&) 的引用。
  • 点和箭头运算符可用于引用对象中的静态类成员,即使它们不是对象的成员。 (感谢 Oli 指出这一点!)

关于c++ - 在 C++ 中什么时候使用点、箭头或双冒号来引用类的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com