Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中,何时使用点、箭头或双冒号来表示类的成员+;? 从其他C派生语言(如java或C++)到C++,首先混淆C ++有三种方法来引用类成员: A::B< /COD>, A.B.,和 A- > B。何时使用这些运算符中的哪一个 (注:这意味着是[堆栈溢出的C++ FAQ ]的条目(https://stackoverflow.com/questions/tagged/c++-faq)。如果你想对以这种形式提供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),这是常见问题解答的最初想法,因此您的答案很可能会被提出此想法的人阅读。)_ 三个不同的操作符C++用于访问类或类对象的成员,即双冒号::,DOT > /COD>,箭头 ->代码>,用于三个不同的场景,它们总是定义良好的。了解了这一点,您就可以立即了解大量有关a和b的信息,只需分别查看查看的任何代码中的a::b、a.b或a->b_C++_C++ Faq - Fatal编程技术网

在C+中,何时使用点、箭头或双冒号来表示类的成员+;? 从其他C派生语言(如java或C++)到C++,首先混淆C ++有三种方法来引用类成员: A::B< /COD>, A.B.,和 A- > B。何时使用这些运算符中的哪一个 (注:这意味着是[堆栈溢出的C++ FAQ ]的条目(https://stackoverflow.com/questions/tagged/c++-faq)。如果你想对以这种形式提供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),这是常见问题解答的最初想法,因此您的答案很可能会被提出此想法的人阅读。)_ 三个不同的操作符C++用于访问类或类对象的成员,即双冒号::,DOT > /COD>,箭头 ->代码>,用于三个不同的场景,它们总是定义良好的。了解了这一点,您就可以立即了解大量有关a和b的信息,只需分别查看查看的任何代码中的a::b、a.b或a->b

在C+中,何时使用点、箭头或双冒号来表示类的成员+;? 从其他C派生语言(如java或C++)到C++,首先混淆C ++有三种方法来引用类成员: A::B< /COD>, A.B.,和 A- > B。何时使用这些运算符中的哪一个 (注:这意味着是[堆栈溢出的C++ FAQ ]的条目(https://stackoverflow.com/questions/tagged/c++-faq)。如果你想对以这种形式提供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),这是常见问题解答的最初想法,因此您的答案很可能会被提出此想法的人阅读。)_ 三个不同的操作符C++用于访问类或类对象的成员,即双冒号::,DOT > /COD>,箭头 ->代码>,用于三个不同的场景,它们总是定义良好的。了解了这一点,您就可以立即了解大量有关a和b的信息,只需分别查看查看的任何代码中的a::b、a.b或a->b,c++,c++-faq,C++,C++ Faq,a::b仅在b是类(或命名空间)a的成员时使用。也就是说,在本例中,a将始终是类(或命名空间)的名称 a.b仅在b是对象的成员(或对象的引用)a时使用。因此,对于a.b,a始终是类的实际对象(或对对象的引用) a->b最初是(*a).b的简写符号。但是,->是唯一可以重载的成员访问操作符,因此如果a是重载操作符->的类的对象(常见的此类类型是智能指针和迭代器),则其含义与类设计器实现的内容无关。总结:使用a->b,如果a是指针,b将是指针a所指对象的成员。但是,如果a是重载此运算符的类的对象,则

a::b
仅在
b
是类(或命名空间)
a
的成员时使用。也就是说,在本例中,
a
将始终是类(或命名空间)的名称

  • a.b
    仅在
    b
    是对象的成员(或对象的引用)
    a
    时使用。因此,对于
    a.b
    a
    始终是类的实际对象(或对对象的引用)

  • a->b
    最初是
    (*a).b
    的简写符号。但是,
    ->
    是唯一可以重载的成员访问操作符,因此如果
    a
    是重载
    操作符->
    的类的对象(常见的此类类型是智能指针和迭代器),则其含义与类设计器实现的内容无关。总结:使用
    a->b
    ,如果
    a
    是指针,
    b
    将是指针
    a
    所指对象的成员。但是,如果
    a
    是重载此运算符的类的对象,则会调用重载运算符函数
    operator->()


  • 小字体:

    • 在C++中,声明为“代码>类< /代码>、<代码>结构> <代码>或<代码>联合< /COD>类型被认为是“类类型”。所以上面提到的是这三个
    • 从语义上讲,引用是对象的别名,所以我也应该在#3中添加“或对指针的引用”。然而,我认为这会让人困惑而不是帮助,因为很少使用指针(
      T*&
      )的引用
    • 点运算符和箭头运算符可用于引用对象中的静态类成员,即使它们不是对象的成员。(感谢奥利指出这一点!)
    建议替代sbi的第3点

    a->b
    仅在
    a
    是指针时使用。它是
    的缩写(*a).b
    ,即
    a
    指向的对象的
    b
    成员。C++有两种指针,即“正则”和智能指针。对于常规指针,如
    A*A
    ,编译器实现
    ->
    。对于智能指针,如
    std::shared_ptr a
    ->
    是类
    shared_ptr
    的成员函数

    理由:本FAQ的目标受众不是编写智能指针。他们不需要知道
    ->
    实际上被称为
    操作符->()
    ,或者它是唯一可以重载的成员访问方法 #包括 使用名称空间std; 阶级人{ 私人: 智力年龄; 公众: 字符串名; Human(int-humanAge,字符串humanName) :年龄(人名),姓名(std::move(人名)){} 无效剂量测定法(){
    cout点运算符用于直接成员选择方案。

    print(a.b)
    
    print(a->b)
    
    print(a::b)
    
    在这里,我们访问的是
    b
    ,它是对象
    a
    的直接成员。因此,首先,
    a
    是对象,
    b
    a
    的成员(函数/变量等)


    箭头运算符用于间接成员选择方案。

    print(a.b)
    
    print(a->b)
    
    print(a::b)
    
    这里,我们正在访问
    b
    ,它是对象的一个成员,由
    a
    指向。它是
    (*a)的缩写。b
    ,因此这里,
    a
    主要是指向对象的指针,
    b
    是该对象的一个成员


    双冒号(作用域)运算符用于与命名空间相关的直接成员选择方案。

    print(a.b)
    
    print(a->b)
    
    print(a::b)
    

    这里,我们正在访问
    b
    ,它是类/名称空间
    a
    的成员。因此,
    a
    主要是类/名称空间,
    b
    是成员(函数/变量等)对于
    a

    可能需要澄清的是,
    ->
    也可以通过对象访问类静态,即使它们不是严格意义上的“对象成员”@Oli:的确如此。我已经把它添加到小字本中了,因为我认为它不常见,也不重要,不能在正文中列出。为了完整起见,可能需要指出的是,
    operator*()
    也可以重载,并且没有任何东西强迫重载与
    operator->()
    一致!(我没有投票否决BTW,只是通过一个长的重复序列来这里)@ OliCharlesworth,您知道C++标准中指定的位置吗?@ JuangopaZa:您不能通过OrdLoad获得<代码> > >代码>的链接行为。