内联函数命名约定
Inline function naming convention
我想知道使用内联函数时是否有某种命名约定。
说我正在实现一个 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 次,我可能更喜欢内联选项。
我想让开发人员可以在这两个选项之间进行选择。我知道编译器负责决定是否将其用作内联函数,但我想如果开发人员可以自己决定就好了。
关于命名约定的问题是因为我 users\developers 不看头文件而只使用智能感知作为指导。
如果您为其公开 API 的库已编译,则 inline
无效。
如果您为 API 提供显式 inline
函数,那么这对用户来说是显而易见的,因为函数 body 必须在 header.
因此不需要命名约定,因为在使用时它总是显而易见的。
我不建议向 "inlined" 函数添加任何前缀。由于几个原因:
- 这个函数是否内联对用户来说重要吗?
- "inline"关键字只是对编译器的一个提示,所以归根结底,由编译器决定是否这样对待函数
- 在 header 中声明的函数(在 class 定义中)已经是 "inline" 所以添加关键字是多余的,没有必要。
如果您的内联函数位于最终用户要包含的 header 文件中,您可以通过在内联函数的名称前加上 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
但是,这只会向最终用户暗示函数 可能 是内联的,而不是像其他答案所指出的那样实际上是内联的。该名称只会向从未查看过 header 的用户指出该函数是 声明的 内联。
我不知道内联函数有任何命名约定,可能 none 存在。这部分是因为不能保证特定函数将被内联。编译器可以自由地将 inline
关键字作为提示,而忽略它。
内联函数可以在没有任何前缀的情况下同时不是内联的。它将在正常位置的代码中内联,但如果您要获取它的地址,编译器必须为其生成代码。因此,我认为,使用指向函数的指针并通过指针调用是一种解决方案。
如果你创建一个库并在内部使用内联函数,你可以做一些创建内联函数指针的静态object,它们的代码将在库中生成。如果你在header本身有一个代码,用户可以调用body函数,他想什么时候自己取地址,或者你可以给他做一个指针并在[=15中导出=] both: 定义内联函数和指向生成的指针body。指针可以有任何你想要的名字,并且可以近似地用作通常的函数。只是记录它。
C++11:
#include <iostream>
inline int fun(int) { return 3; }
auto pfun = &fun;
int main()
{
std::cout << pfun(4) << std::endl;
return 0;
}
我想知道使用内联函数时是否有某种命名约定。
说我正在实现一个 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 次,我可能更喜欢内联选项。
我想让开发人员可以在这两个选项之间进行选择。我知道编译器负责决定是否将其用作内联函数,但我想如果开发人员可以自己决定就好了。
关于命名约定的问题是因为我 users\developers 不看头文件而只使用智能感知作为指导。
如果您为其公开 API 的库已编译,则 inline
无效。
如果您为 API 提供显式 inline
函数,那么这对用户来说是显而易见的,因为函数 body 必须在 header.
因此不需要命名约定,因为在使用时它总是显而易见的。
我不建议向 "inlined" 函数添加任何前缀。由于几个原因:
- 这个函数是否内联对用户来说重要吗?
- "inline"关键字只是对编译器的一个提示,所以归根结底,由编译器决定是否这样对待函数
- 在 header 中声明的函数(在 class 定义中)已经是 "inline" 所以添加关键字是多余的,没有必要。
如果您的内联函数位于最终用户要包含的 header 文件中,您可以通过在内联函数的名称前加上 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
但是,这只会向最终用户暗示函数 可能 是内联的,而不是像其他答案所指出的那样实际上是内联的。该名称只会向从未查看过 header 的用户指出该函数是 声明的 内联。
我不知道内联函数有任何命名约定,可能 none 存在。这部分是因为不能保证特定函数将被内联。编译器可以自由地将 inline
关键字作为提示,而忽略它。
内联函数可以在没有任何前缀的情况下同时不是内联的。它将在正常位置的代码中内联,但如果您要获取它的地址,编译器必须为其生成代码。因此,我认为,使用指向函数的指针并通过指针调用是一种解决方案。 如果你创建一个库并在内部使用内联函数,你可以做一些创建内联函数指针的静态object,它们的代码将在库中生成。如果你在header本身有一个代码,用户可以调用body函数,他想什么时候自己取地址,或者你可以给他做一个指针并在[=15中导出=] both: 定义内联函数和指向生成的指针body。指针可以有任何你想要的名字,并且可以近似地用作通常的函数。只是记录它。 C++11:
#include <iostream>
inline int fun(int) { return 3; }
auto pfun = &fun;
int main()
{
std::cout << pfun(4) << std::endl;
return 0;
}