- > C++中静态分配的对象不允许运算符?

Sch*_*ote 1 c++ syntax

我是一名自学成才的程序员,第一次参加正式的大学程序设计课程.今天有人问C++课程的讲师->操作员做了什么.

教官说,沿着"箭头操作线的东西,除了用于动态分配的对象点运算符是等效的.你只能使用在静态分配对象点运算符[随后声明变量的一个例子,在一个块的开始],你只能使用箭头操作符动态分配你制作的对象new."

C++绝对不是我的专业领域......但是我所看到的所有其他事情a->b都完全相同*a.b,并且它主要是出于遗留原因而存在,因为变量在早期版本的C++中的工作方式不同.

是否真的->不能用于指向堆栈上分配的对象的指针,并且.不能用于指向堆上分配的对象的解引用指针?

Ice*_*ire 7

你的教师的答案是不正确的,它概括了一些常见的基本案例,但它也表明他或她没有任何用C++编写大型项目的经验.原因如下:

如果在堆栈上分配对象,即使用C++的自动内存,通常会执行以下操作:

SomeClass object;
object.doSomething();
Run Code Online (Sandbox Code Playgroud)

如果在堆上分配内存,它通常如下所示:

SomeClass* object = new SomeClass; // unique_ptrs are a better way but this might be easier to grab for now
object->doSomething();
delete object;
Run Code Online (Sandbox Code Playgroud)

但是您也可以通过引用引用对象,以便.再次工作.并且您可能有一个指针指向object已在堆栈或堆上分配的指针,从而可以通过->工作进行访问.

总而言之,.它用于访问非指针并->用于访问指针.此外,可能存在operator->重载的类.然后,您还可以使用该运算符访问类的非指针实例.