正确放置'inline'
Correct placement of 'inline'
我将inline
正确地放在哪里?
test1.h:
class test1
{
inline void method1() {}
};
test2.h:
class test2
{
void method2();
};
inline void test2::method2() {}
test3.h:
class test3
{
inline void method3();
};
inline void test3::method3() {}
test4.h:
class test4
{
inline void method4();
};
test4.cpp:
void test4::method4() {}
test5.h:
class test5
{
inline void method5();
};
test5.cpp:
inline void test5::method5() {}
test6.h:
class test6
{
void method6();
};
test6.cpp:
inline void test6::method6() {}
test7.h:
class test7
{
inline void method7();
};
void test7::method7() {}
(我习惯于像示例6中那样编码,但读了很多inline
,现在我不再确定了)这些例子中哪一个是inline
的正确用法,为什么它们不同,它们都有效吗?
编辑#1:所有这些例子都是private
,我一开始没有想到public
和protected
。正如评论中所说,因此可能会出现重大错误。
4、5和6(可能)是错误的:内联函数必须在每个使用它们的翻译单元中定义,因此这些函数只允许在一个翻译单元中使用该函数。对于只由同一源文件中定义的其他函数调用的私有函数来说,这可能是可以接受的,但会阻止您通常想要的头中声明的函数的更通用用法。
其他的都是等价的:它们在一个头中至少包含一个内联声明,并且只包含一个定义,这样定义就可以包含在任何需要的地方。(只要标头得到适当的保护,不被重新包含,以防止在一个翻译单元中有多个定义)。
在第一个例子中,inline
关键字是多余的:类定义中定义的函数是隐式内联的。
我建议不要使用3和7,因为如果您以后决定函数不应该是内联的,它们需要更改声明和定义。这使得1和2成为我的首选;我只会对非常短的函数使用1,以避免混淆类定义。
除了4、5和6之外的所有示例都是正确的,前提是在具有inline
的声明具有被看到。在实践中,7是我在成功的大型项目;对于本地类,在中定义源文件,也使用1,但没有inline
关键字(这在这里是隐含的)。
Test 4我认为可能会给您带来编译错误,因为编译器将在声明所在的文件中预期代码。inline关键字指定代码的实际正文(在同一文件中,链接),并在调用函数的位置插入完整的代码正文。第一部分很重要,因为如果代码体位于与内联指定的文件不同的文件中。。。编译将失败。
下面是MSDN的一篇短文,概述如下:http://msdn.microsoft.com/en-us/library/1w2887zk.aspx
- 激励'inline'说明符的真实世界示例?
- C++中的"inline"关键字
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 'inline'变量可以像内联函数一样内联吗?
- C++编译器不喜欢"using INLINE = extern inline"
- "inline"、"constexpr"或"noexcept"
- C++17 'inline variable' vs 'extern' 关键字继承自 C 的新功能
- C++不使用"inline"或"static"无类函数的关键字时出现重定义链接错误
- c++17 inline + thread_local vs thread_local
- Inline STD :: MUTEX在标题文件中
- asm inline vs 2015 with call RegCreateKeyEx
- 用std :: stringstream inline代替字符
- "inline operator T*() const"是什么意思?
- 如何在Visual Studio中禁用自动插入'inline'关键字?
- 将新元素推送到函数指针映射中 "inline" ?
- 什么是模板<>inline bla bla
- 使用Inline ASM调用WriteProcessMemory时出错
- 为什么静态内联变量需要"inline"?
- C++ - Xcode "Inline Function Expansion"像Visual Studio中的优化功能一样?
- Windows / Intel Compiler / Inline Assembler & GNU 语法问题