我可以使用什么代替箭头操作符,` - >`?

时间:2008-10-21 10:00:09

标签: c++ pointers

箭头操作符(->)是什么的同义词?

7 个答案:

答案 0 :(得分:126)

以下两个表达式是等效的:

a->b

(*a).b

(受操作员超载影响,正如Konrad所提到的那样,但那是不寻常的)。

答案 1 :(得分:66)

a->b通常是(*a).b的同义词。这里的括号是必要的,因为运算符*.的绑定强度:*a.b不起作用,因为.绑定更强并且首先执行。因此,这相当于*(a.b)

请注意重载:由于->*都可以重载,因此它们的含义会大不相同。

答案 2 :(得分:41)

C ++语言将箭头运算符(->)定义为解引用指针的同义词,然后在该地址上使用. - 运算符。

例如:

如果您有一个对象anObject和一个指针aPointer

SomeClass anObject = new SomeClass();
SomeClass *aPointer = &anObject;

为了能够使用其中一个对象方法,您可以取消引用指针并对该地址执行方法调用:

(*aPointer).method();

可以使用箭头操作符编写:

aPointer->method();

箭头操作符存在的主要原因是它缩短了一个非常常见的任务的类型,并且很容易忘记指针解除引用周围的括号。如果你忘记了括号,.-运算符将绑定更强大的* -operator并使我们的示例执行为:

*(aPointer.method()); // Not our intention!

其他一些答案也提到C ++运算符都可以重载并且不常见。

答案 3 :(得分:15)

在C ++ 0x中,运算符获得第二个含义,表示函数或lambda表达式的返回类型

auto f() -> int; // "->" means "returns ..."

答案 4 :(得分:13)

我大多从右到左阅读并打电话给“in”

foo->bar->baz = qux->croak

变为:

“foo中的baz变成了qux中的呱呱叫。”

答案 5 :(得分:0)

->用于访问您有指针的数据。

例如,您可以像这样创建一个指向int intVar类型变量的指针ptr:

int* prt = &intVar;

然后只能通过取消引用该指针在其上使用函数,例如foo,以在指针指向的变量上调用该函数,而不是对该变量的内存位置的数值进行调用:< / p>

(*ptr).foo();

这里没有括号,由于运算符优先级不是我们想要的,因此编译器会将其理解为*(ptr.foo())

这实际上与输入相同

ptr->foo();

由于->取消了该指针的引用,因此在指针为我们指向的变量上调用函数foo()

类似地,我们可以使用->来访问或设置类的成员:

myClass* ptr = &myClassMember;
ptr->myClassVar = 2; 

答案 6 :(得分:0)

您可以使用->定义函数。

.prop('hidden', ... )

这不是lambda。这确实是一个功能。 “->”表示函数的返回类型。