![]() |
1
37
这个
例如:
上面的代码打印出来
正如你所看到的,首先是一个
|
![]() |
2
6
|
![]() |
3
5
这并不矛盾。 在使用指向函数的指针的部分中,可以创建具有地址的非内联版本。 |
![]() |
4
3
函数的内联扩展没有地址,但如果该函数有静态变量,则该变量确实有地址。静态变量基本上只是一个全局变量 名称 仅在本地可见(即,在其定义的范围内)。内联函数中的其他变量可能在堆栈上分配(就像它没有内联扩展时一样),或者它们可能只存在于机器寄存器中。重要的一点是,它们仍然是独立的变量,并且必须像函数没有被内联扩展一样工作(不像宏,例如宏,在宏中需要非常小心,以防止多个求值引起问题)。 |
![]() |
5
0
它们可能在某些调用位置内联,但它们仍然作为普通函数存在于地址空间中。 |
![]() |
6
0
我认为您混淆了内联函数对象代码的位置和内联的含义。通常,我们将内联函数可视化为放在源代码级别的调用函数中。这本书所说的是,变量名,包括内联函数中静态的使用,被视为与函数实际上是典型的独立函数一样。 此外,使用inline关键字处理函数并不能保证它们是内联的,对于不能内联的情况(例如需要地址时),将生成非内联版本。 |