我在阅读 C++ 程序时遇到了这个问题
inline Controller* Get_it() { // ... bla bla
我不明白这是什么意思。这是否暗示了 Get_it 函数的定义?我搜索了定义了 Get_it 函数的文件,但没有找到。我认为语法a * b意味着b是指向结构a对象的指针,但没有结构控制器。虽然在其他地方定义了一个类 Controller。
提前谢谢大家。我是 C++ 新手,我正在努力理解。
该函数Get_it
返回一个Controller*
. 这是一个指向 a 的指针Controller
,它是一种必须在翻译单元中高于此点的某处声明的类型。该函数被标记inline
,这是对编译器的一个提示,它可以内联代码,基本上将函数体复制到每个调用它的地方。
这两件事是分开的。指针不是inline
,函数是。
关键字inline
影响它被定义的内容,并且只适用于函数。形式上,它允许(实际上需要)函数的多个定义。这也是对编译器的“提示”,它应该尝试直接在调用站点生成函数的代码,而不是在其他地方生成调用。(正式定义的动机是编译器通常不能生成内联代码,除非它可以访问定义。)
首先,你应该给自己找一本关于 C++ 的好书。其次,这是一个指向Controller
对象(内存中的类)的指针。它由函数返回,并且函数是内联定义的,这意味着它将被完全复制到调用站点的任何位置。
这个inline
词是对编译器的建议,在明智的情况下进行内联,但是因为您似乎表明该函数是在类声明中定义的,所以编译器会自动内联。
inline
关键字不适用于指针(函数的返回值),但适用于函数本身。所以在这里你声明(并定义)一个inline
返回指针的函数Controller
。
关键字将inline
方法定义为 inline 1,无论它在哪里实现。上面的签名意味着该函数Get_it()
返回一个指向Controller
对象的指针。函数本身是内联的。
1内联意味着get方法不是通过vtbl寻址,而是get直接分配在对象的内存中,因此在对象实例上调用方法时没有间接性,但是对象实例本身的内存大小会增加。