C++ 我什么时候使用 -> 或 :: [重复]

问题描述 投票:0回答:5

我知道在 C++ 中,您可以使用

->
::
而不是 C# 等语言中的
.
来访问对象的值,例如
button->Text
System::String^
,但我不知道何时我应该使用
->
::
,这非常令人沮丧,因为它给我带来了许多编译器错误。如果您能提供帮助,我将非常感激。谢谢:)

c++ operators expression scope-resolution-operator
5个回答
10
投票

->
是当您访问指针变量的成员时。 EG:
myclass *m = new myclass(); m->myfunc();
在指向
myfunc()
的指针上调用
myclass
::
是范围运算符。这是为了显示某物的范围。因此,如果
myclass
在名称空间
foo
中,那么你会写
foo::myclass mc;


4
投票
  • ->
    如果您有指向某个对象的指针,这只是取消引用该指针并访问其属性的快捷方式。

    pointerToObject->member
    (*pointerToObject).member

  • 相同
  • ::
    用于从某个范围访问内容 - 它仅适用于名称空间和类/结构范围。

    namespace MyNamespace {
      typedef int MyInt;
    }
    MyNamespace::MyInt variable;
    

4
投票

与您的问题所述相反,您do在C++中使用

.
。相当多。

.
(与非指针一起使用来访问成员和方法)

std::string hello = "Hello";
if (hello.length() > 3) { ... }

->
(与访问成员和方法的指针一起使用)

MyClass *myObject = new MyClass;
if (myObject->property)
    myObject->method();

::
(范围分辨率)

void MyClass::method() { ... } //Define method outside of class body

MyClass::static_property; //access static properties / methods

::
还用于命名空间解析(请参阅第一个示例,
std::string
,其中
string
位于命名空间
std
中)。


3
投票

我尝试展示

::
.
->
的一些用法的示例。我希望它有帮助:

int g;

namespace test
{

  struct Test
  {
     int x;
     static void func();
  };

  void Test:: func() {
     int g = ::g;
  }

}

int main() {

  test::Test v;
  test::Test *p = &v;

  v.x = 1;
  v.func();
  p->x = 2;
  p->func();

  test::Test::func();

}

2
投票

当左操作数是指针时,应用运算符 ->。例如考虑一下

struct A
{
   int a, b;
   A( int a, int b ) : a( a ), b( this->a * b ) {}
};

Operator :: 指的是右操作数所属的类或anmespace。例如

int a;

strunt A
{
   int a;
   A( int a ) { A::a = a + ::a; }
};

使用句点,则左操作数是对象的左值。例如

struct A
{
   int x;
   int y;
};

A *a = new A;

a->x = 10;
( *a ).y = 20;
© www.soinside.com 2019 - 2024. All rights reserved.