内联函数命名约定



我想知道在使用内联函数时是否有一种命名约定。

假设我正在实现一个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,那么这对用户来说是显而易见的,因为函数体必须在头文件中。

所以不需要命名约定,因为它在使用时总是很明显的。

我不建议给"内联"函数添加任何前缀。由于以下几个原因:

  1. 对于这个函数的用户来说,它是否内联很重要吗?
  2. "inline"关键字只是对编译器的一个提示,所以在一天结束时,由编译器来处理函数。
  3. 在头文件中(在类定义中)声明的函数已经是"内联的",所以添加关键字是多余的,也没有必要。

如果您的内联函数位于最终用户要包含的头文件中,您可以通过在内联函数的名称前加上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;
}

最新更新