我想知道在使用内联函数时是否存在某种命名约定。
假设我正在实现一个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> 1:1000000。 如果我调用它一次,我希望它只是被正常调用,但如果在for循环中调用1000000次,我可能更喜欢内联选项。
我想让开发人员可以在这两个选项之间进行选择。我知道编译器负责决定它是否会被用作内联函数,但我想如果开发人员可以自己决定它会很好。
命名约定的问题源于这样一个事实,即我的用户\开发人员不会查看头文件,而只会使用智能感知作为指导。
答案 0 :(得分:5)
如果编译了您公开API的库,则inline
无效。
如果您正在为API提供明确的inline
函数,那么这对用户来说是显而易见的,因为函数体必须位于标题中。
所以不需要命名约定,因为它在使用时总是很明显。
答案 1 :(得分:3)
我不建议在"内联"中添加任何前缀。功能。由于以下几个原因:
答案 2 :(得分:1)
如果您的内联函数位于最终用户要包含的头文件中,您可以通过使用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
关键字作为提示,并忽略它。
答案 3 :(得分:0)
内联函数可能同时不是内联而没有任何前缀。它将在代码中以正常位置内联,但如果您使用它的地址,编译器必须为其生成代码。因此,我认为,使用指向函数的指针并通过指针调用是一种解决方案。 如果您在内部创建库并使用内联函数,则可以执行一些静态对象来创建内联函数的指针,并且它们的代码将在库中生成。如果你在头文件中有一个代码,那么用户可以调用函数体,在他想要的时候自己获取地址,或者你可以为他做一个指针并在头文件中导出两者:内联函数的定义和指向生成的身体。指针可以具有您想要的任何名称,并且可以大致用作常用函数。记下来吧。 C ++ 11:
#include <iostream>
inline int fun(int) { return 3; }
auto pfun = &fun;
int main()
{
std::cout << pfun(4) << std::endl;
return 0;
}