代码之家  ›  专栏  ›  技术社区  ›  Joey

ptr->hello();/*对*/(*ptr).hello();

  •  12
  • Joey  · 技术社区  · 16 年前

    我正在学习C++指针和 -> 接线员对我来说似乎很奇怪。而不是 ptr->hello(); 一个人可以写 (*ptr).hello(); 因为它似乎也起作用了,所以我认为前者只是一种更方便的方式。

    是这样还是有什么区别?

    6 回复  |  直到 12 年前
        1
  •  35
  •   dsimcha    16 年前

    ->运算符是 只是语法糖 因为 (*ptr).hello() 是要打的皮塔。就asm级别生成的指令而言,没有区别。事实上,在某些语言中(想到d),编译器会根据类型计算出所有的内容。如果你这样做了 ptr.hello() ,它只起作用,因为编译器知道ptr是一个指针,并且没有hello()属性,所以必须是 (*ptr)你好() .

        2
  •  15
  •   Max Lybbert    16 年前

    其他人已经回答了关于内置指针的问题。对于类,可以重载运算符->(), operator&() ,和运算符*(),但不是运算符。()。

    这意味着对象的行为可能会因调用的语法不同而有所不同。

        3
  •  8
  •   Paul    16 年前

    在可读性方面的主要优势在于您必须链接函数调用,即:

    ptr->getAnotherPtr()->getAThirdPtr()->print()
    

    我甚至不想麻烦接线员这么做。

        4
  •  7
  •   jjnguy Julien Chastang    16 年前

    唯一的理由是 '->' 操作员将使其更方便并保存错误,如:

    *ptr.hello();
    

    因为很容易忘记括号。

        5
  •  5
  •   Andrei Krotkov    16 年前

    它们生成相同的机器代码,但对我来说,ptr->arg()比(*ptr.arg()更容易阅读。

        6
  •  0
  •   Don Wakefield    16 年前

    这些替代语法模式是从c中采用的,您可能会从 A Tutorial on Pointers and Arrays in C 特别是第五章, Pointers and Structure .