![]() |
1
8
只有我的两分钱。这不是特别关于虚函数,而是关于内联函数和成员函数。也许它是有用的。 就标准C++而言,内联函数 必须 在使用它的每个翻译单元中定义。非静态内联函数在每个转换单元中都有相同的静态变量和相同的地址。编译器/链接器必须将多个定义合并到一个函数中才能实现这一点。因此,始终将内联函数的定义放在头中——或者如果你只在实现文件(“.cpp”)中定义了它(对于非成员函数),则不在头中声明它,因为如果你这样做,并且有人使用了它,你会得到一个关于未定义函数或类似东西的链接器错误。 ).对于内联函数,如上所述的多个定义是很正常的情况。这与调用是否自然内联无关。关于内联函数的规则仍然很重要。微软编译器是否遵守这些规则,我不能告诉你。如果它在这方面遵守标准,那么它就会遵守。然而,我可以想象,使用虚拟、dll和不同TU的组合可能会有问题。我从来没有测试过,但我相信没有问题。
C99内联定义 必须 也是 另一个翻译单元中包含的整个程序中的外部定义。理由(引用PDF解释C99几个功能背后的理由):
测试小型C++代码段是否符合标准的一个好地方是 comeau online compiler 如果它被拒绝了,人们可以很确定它不是严格符合标准的。 |
![]() |
2
7
|
![]() |
3
4
|
![]() |
4
3
编辑: 任何 实际杠杆。我所说的实用性,是指即使实现方式略有不同。
是
允许有多个定义
和
每 未定义
至于
标准规定:
MSDN :
你的
您创建了另一个
到目前为止,我只看到了一个定义
|
![]() |
5
2
如果你想确保函数被编译到特定的库中,不要内联它们。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 7 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 7 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 7 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 7 月前 |