0

我在阅读 C++ 程序时遇到了这个问题

inline Controller* Get_it() { // ... bla bla

我不明白这是什么意思。这是否暗示了 Get_it 函数的定义?我搜索了定义了 Get_it 函数的文件,但没有找到。我认为语法a * b意味着b是指向结构a对象的指针,但没有结构控制器。虽然在其他地方定义了一个类 Controller。

提前谢谢大家。我是 C++ 新手,我正在努力理解。

4

5 回答 5

2

该函数Get_it返回一个Controller*. 这是一个指向 a 的指针Controller,它是一种必须在翻译单元中高于此点的某处声明的类型。该函数被标记inline,这是对编译器的一个提示,它可以内联代码,基本上将函数体复制到每个调用它的地方。

这两件事是分开的。指针不是inline,函数是。

于 2013-04-04T09:42:01.770 回答
1

关键字inline影响它被定义的内容,并且只适用于函数。形式上,它允许(实际上需要)函数的多个定义。这也是对编译器的“提示”,它应该尝试直接在调用站点生成函数的代码,而不是在其他地方生成调用。(正式定义的动机是编译器通常不能生成内联代码,除非它可以访问定义。)

于 2013-04-04T09:43:17.247 回答
0

首先,你应该给自己找一本关于 C++ 的好书。其次,这是一个指向Controller对象(内存中的类)的指针。它由函数返回,并且函数是内联定义的,这意味着它将被完全复制到调用站点的任何位置。

这个inline词是对编译器的建议,在明智的情况下进行内联,但是因为您似乎表明该函数是在类声明中定义的,所以编译器会自动内联。

于 2013-04-04T09:42:13.273 回答
0

inline关键字不适用于指针(函数的返回值),但适用于函数本身。所以在这里你声明(并定义)一个inline返回指针的函数Controller

于 2013-04-04T09:43:10.313 回答
0

关键字将inline方法定义为 inline 1,无论它在哪里实现。上面的签名意味着该函数Get_it()返回一个指向Controller对象的指针。函数本身是内联的。

1内联意味着get方法不是通过vtbl寻址,而是get直接分配在对象的内存中,因此在对象实例上调用方法时没有间接性,但是对象实例本身的内存大小会增加。

于 2013-04-04T09:43:54.937 回答