什么是'extern inline'函数以及何时使用?
What is an 'extern inline' function and when to use?
有这样的事情,它在最新的C++草案中:
在§ 7.1.2 .4:
应在以下每个翻译单元中定义内联函数: 它是ODR使用的,并且在每个中都应具有完全相同的定义 案例 (3.2)。[ 注意:可能会遇到对内联函数的调用 在其定义出现在翻译单元中之前。— 尾注 ] 如果 函数的定义出现在翻译单元中,位于其之前 第一个声明为内联,程序格式不正确。如果函数 外部链接在一个翻译单元中内联声明,它 应在出现的所有翻译单元中内联声明; 无需诊断。具有外部链接的内联功能 所有翻译单元的地址应相同。静态本地 外部内联函数中的变量总是引用相同的变量 对象。在外部内联函数主体中定义的类型是 每个翻译单元中的类型相同。
关于这是什么以及何时使用它的一些见解?
extern
对于函数来说是多余的,因此将函数声明为extern inline
是没有意义的。例如,如果您声明了一个在全局范围内inline
函数,则本节的规则将适用。同样,如果您在全局范围内声明了一个类并在类定义中定义了成员函数,因为这样的函数将隐式inline
。
什么时候应该声明一个函数的问题inline
是一罐蠕虫,我不倾向于在这里打开。请参阅:何时应该为函数/方法编写关键字"inline"?
我不熟悉C++中的这个草案功能,以及它是否成为标准。我认为它可能借用了 C 的一个功能。
在 C(我认为是 C99?)中,extern inline
用于源文件,而不是头文件。 指示工具从此源生成的对象文件应该是保存最终实现的对象文件。如果没有它,链接器必须选择一个站点或复制符号。
例如,在my_alloc.h
:
inline char *my_alloc(size_t len) { return (char*)malloc(len); }
并在my_alloc.c
:
extern inline char *my_alloc(size_t len);
- 激励'inline'说明符的真实世界示例?
- C++中的"inline"关键字
- 何时在引用或唯一指针上使用移动语义
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- std::vector的包装器,使数组的结构看起来像结构的数组
- 何时提供默认参数作为模板参数
- 如何在全屏模式下(在OpenGL中)使背景透明
- 找到两对数字,使它们的乘积的绝对差最小化
- C++:如何使函数只返回作为列表一部分的字符串
- C++-明确何时以及如何调用析构函数
- c++使用foreach使数组为null
- 使外部项目可用于find_package CMake
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 何时使函数成为类成员函数C++?
- 何时必须使操作员<<过载?
- 在Windows上,何时有必要将附加到目录路径上,以使_stat成功
- 何时在带有头文件和目标文件的类方法中使用“inline”关键字
- 什么是'extern inline'函数以及何时使用?
- Apple C++ LLVM Compiler 4.x & UNICODE:何时需要?UNICODE 是默认编译器字符集吗?使代码同时编译 ANSI 和 UNICODE 版本
- 如何使libcurl c++调用超时和/或知道调用中何时发生超时