我想知道在使用内联函数时是否有一种命名约定。
假设我正在实现一个API,并且想让用户决定他是想使用普通函数还是内联函数(两者都做同样的事情),是否有一个命名约定如何使外部世界看到函数可能是内联的?我知道我可以查看。h或。inl文件
编辑:我觉得有必要澄清一些问题,因为我一开始似乎没有讲清楚。
假设我有一个接受三个值的函数。比如:
bool MyClass::AddTwoNumbersAndCheckIfBigger(int summandOne, int summandTwo, int biggerNr)
{
bool isBigger = false;
int sum = summandOne+summandTwo;
if(sum > biggerNr)
{
isBigger = true;
}
return isBigger;
}
这个函数可以被调用一次,直到x> 1000000。如果我调用它一次,我希望它只是被正常调用,但如果它在for循环中被调用1000000次,我可能更喜欢一个内联选项。
我想给开发人员在这两个选项之间做出选择的可能性。我知道编译器负责决定是否将其用作内联函数,但我想如果开发人员可以自己决定,那就太好了。
命名约定的问题源于这样一个事实,即我的用户开发人员不看头文件,而只使用智能感知作为指导。
如果您要公开API的库是编译的,那么inline
是无效的。
如果你提供一个带有显式inline
函数的API,那么这对用户来说是显而易见的,因为函数体必须在头文件中。
所以不需要命名约定,因为它在使用时总是很明显的。
我不建议给"内联"函数添加任何前缀。由于以下几个原因:
- 对于这个函数的用户来说,它是否内联很重要吗?
- "inline"关键字只是对编译器的一个提示,所以在一天结束时,由编译器来处理函数。
- 在头文件中(在类定义中)声明的函数已经是"内联的",所以添加关键字是多余的,也没有必要。
如果您的内联函数位于最终用户要包含的头文件中,您可以通过在内联函数的名称前加上inline_
或类似的内容来区分两者:
inline void inline_my_func(void) {...} //inlined function (may or may not be inlined by compiler)
void my_func(void); //non-inlined function, same operation, defined elsewhere
然而,这只会向最终用户暗示函数可能是内联的,而不是像其他答案指出的那样,它实际上是内联的。该名称只会向从未看过头文件的用户指出该函数是声明为内联的。
我不知道内联函数有什么命名约定,可能根本不存在。这部分是因为不能保证某个特定的函数将被内联。编译器可以自由地将inline
关键字作为提示,而忽略它。
内联函数可以同时是非内联的,没有任何前缀。它将被内联在代码中的正常位置,但如果你要它的地址,编译器必须为它生成一个代码。因此,我认为,使用指针指向函数并通过指针调用是一种解决方案。如果你创建了一个库并在内部使用内联函数,你可以做一些静态对象来创建内联函数的指针,它们的代码将在库中生成。如果你在头文件本身中有代码,用户可以调用函数体,在他想要的时候自己获取地址,或者你可以为他做一个指针,并在头文件中导出内联函数的定义和指向生成体的指针。指针可以有任何您想要的名称,并且可以近似地作为普通函数使用。把它记录下来。c++ 11:
#include <iostream>
inline int fun(int) { return 3; }
auto pfun = &fun;
int main()
{
std::cout << pfun(4) << std::endl;
return 0;
}