内联函数命名约定

时间:2015-10-20 12:34:15

标签: c++ coding-style naming

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

假设我正在实现一个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次,我可能更喜欢内联选项。

我想让开发人员可以在这两个选项之间进行选择。我知道编译器负责决定它是否会被用作内联函数,但我想如果开发人员可以自己决定它会很好。

命名约定的问题源于这样一个事实,即我的用户\开发人员不会查看头文件,而只会使用智能感知作为指导。

4 个答案:

答案 0 :(得分:5)

如果编译了您公开API的库,则inline无效。

如果您正在为API提供明确的inline函数,那么这对用户来说是显而易见的,因为函数体必须位于标题中。

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

答案 1 :(得分:3)

我不建议在"内联"中添加任何前缀。功能。由于以下几个原因:

  1. 对于此功能的用户,如果它是否内联,是否重要?
  2. " inline"关键字只是对编译器的一个提示,因此在一天结束时,编译器可以将此功能视为或不是
  3. 标题中声明的函数(在类定义中)已经是" inline"所以添加关键字是多余的,没有必要。

答案 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;
}