".","::"和" - >"之间的区别

She*_*len 4 c++

在c ++中,这三个代码块之间有任何区别:

MyClass->m_Integer // 1
MyClass::m_Integer // 2
MyClass.m_Integer  // 3
Run Code Online (Sandbox Code Playgroud)

Dan*_*her 11

->.运营商的方式来访问一个类的实例的成员,并::允许你访问类的静态成员.

->和之间的区别在于.箭头用于通过指向实例的指针进行访问,其中点用于访问值(非指针).

例如,假设您有一个MyClass定义为的类:

class MyClass
{
public:
    static int someValue();
    int someOtherValue();
};
Run Code Online (Sandbox Code Playgroud)

您将在以下情况下使用这些运算符:

MyClass *ptr = new MyClass;
MyClass value;

int arrowValue = ptr->someOtherValue();
int dotValue = value.someOtherValue();
int doubleColonValue = MyClass::someValue();
Run Code Online (Sandbox Code Playgroud)

在Java中,这看起来像:

MyClass ref = new MyClass;

int dotValue = ref.someOtherValue();
int doubleColonValue = MyClass.someValue();
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用`::`运算符(称为范围解析运算符)来引用命名空间或类的成员. (5认同)

Mic*_*gan 6

- >表示MyClass是指向类的指针,并且指针需要被解引用才能获取成员m_Integer

::是范围或命名空间运算符.这意味着m_Integer要么是静态的,要么需要特定地识别m_Integer所在的范围或命名空间.

.意味着m_Integer正在从MyClass直接访问(而不是通过指针).它几乎是你如何从Java中访问成员,应该是你最熟悉的那个.


tru*_*ity 6

  • a::b- a是名称空间或类(不是实例),因此b需要是一些静态实体
  • a.b- a是一个类的实例,b是它的成员
  • a->b- 与(*a).b(a是指向类实例的指针)相同