C ++何时使用 - >要么 ::

时间:2013-10-30 15:57:32

标签: c++

我知道在C ++中,您在C#等语言中使用->::代替.来访问对象的值,例如: button->TextSystem::String^,但我不知道何时我应该使用->::,这会让我非常沮丧许多编译器错误。如果你能提供帮助,我将非常感激。谢谢:))

5 个答案:

答案 0 :(得分:10)

->是您访问指针变量的成员时。 EG:myclass *m = new myclass(); m->myfunc();在指向myfunc()的指针上调用myclass::是范围运算符。这是为了显示某些范围。如果myclass位于命名空间foo中,那么您可以编写foo::myclass mc;

答案 1 :(得分:4)

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

    pointerToObject->member(*pointerToObject).member

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

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

答案 2 :(得分:4)

与您的问题所述相反,您 在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::stringstring位于名称空间std中。)

答案 3 :(得分: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();

}

答案 4 :(得分:2)

Opertor - >当左操作数是指针时应用。考虑例如

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

Operator ::引用右操作数所属的类或空间。例如

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;