Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将对象视为指针或指针之间的区别?_C++_Object_Pointers - Fatal编程技术网

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-谢谢。我现在已经修好了。