C++ 将对象视为指针或指针之间的区别?
假设我有一个对象/指针/不管这类事物的定义是什么:C++ 将对象视为指针或指针之间的区别?,c++,object,pointers,C++,Object,Pointers,假设我有一个对象/指针/不管这类事物的定义是什么: A* a = new A(); 谁碰巧有办法 b(); c(); 我发现的做事方式是: a->b(); 这种方法非常有效。 但是现在我看到人们这样做: (*a).b(); 问题是:这两种调用方法的方式之间的区别是什么,即如何分别管理地址和值,并根据这两种方法,使用哪种方法最好 如果这是其他问题的重复,请告诉我,我会在看到原始问题后将其删除。没有区别。它只是一个不同的符号。没有区别。它只是一个不同的符号。没有区别。更喜欢->因为它更
A* a = new A();
谁碰巧有办法
b();
c();
我发现的做事方式是:
a->b();
这种方法非常有效。
但是现在我看到人们这样做:
(*a).b();
问题是:这两种调用方法的方式之间的区别是什么,即如何分别管理地址和值,并根据这两种方法,使用哪种方法最好
如果这是其他问题的重复,请告诉我,我会在看到原始问题后将其删除。没有区别。它只是一个不同的符号。没有区别。它只是一个不同的符号。没有区别。更喜欢->因为它更干净,并且更好地说明了您的意思
但是,->和*可以重载。因此,对于某些类,它们可能会做不同的事情,尽管这是非常罕见的,对于指针来说是不可能的。没有区别。更喜欢->因为它更干净,并且更好地说明了您的意思
但是,->和*可以重载。因此,对于某些类,它们可能会做不同的事情,尽管这非常罕见,对于指针来说是不可能的。符号是语法糖。符号是语法糖。对于指针,没有区别: 如果您声明:
A* pointer_to_A = new A();
那么这两个定义是等价的:
pointer_to_A->b();
(*pointer_to_A).b();
但是,如果您在对象上声明:
A a;
那么这两个不一定相等:
a->b();
(*a).b();
在本例中,第一行调用::运算符->而第二行调用::运算符*。旁白:这种情况有点罕见。它最常用于行为类似于指针的对象:迭代器、智能点等。如果它们设计良好,则上述两种形式仍然相同。对于指针,没有区别: 如果您声明:
A* pointer_to_A = new A();
那么这两个定义是等价的:
pointer_to_A->b();
(*pointer_to_A).b();
但是,如果您在对象上声明:
A a;
那么这两个不一定相等:
a->b();
(*a).b();
在本例中,第一行调用::运算符->而第二行调用::运算符*。旁白:这种情况有点罕见。它最常用于行为类似于指针的对象:迭代器、智能点等。如果它们设计得很好,那么上面的两种形式仍然相同。没有区别,只是更容易看到它在做什么。再加上其他语言以这种方式调用方法。没有区别,只是更容易看到它在做什么。加上其他语言那样调用方法,我想你的意思是“指向A.b的指针”;在你的代码中。如果我错了,请纠正我。我也明白你的意思。所以,对于一个自初始化对象,交易是不同的。@Yokhen-谢谢。我现在已经修好了。我想你是说*指向A.b;在你的代码中。如果我错了,请纠正我。我也明白你的意思。所以,对于一个自初始化对象,交易是不同的。@Yokhen-谢谢。我现在已经修好了。