Tag: 内联

内联元素的边缘

我的问题很简单: 为什么firefox中的内联元素的边界被忽略? 有人知道吗?

我如何告诉gcc不要内联一个函数?

说我有一个源文件中的这个小函数 static void foo() {} 并build立了我的二进制文件的优化版本,但我不希望这个函数内联(为了优化的目的)。 有没有我可以在源代码中添加一个macros来防止内联?

“静态”和“静态内联”function有什么区别?

国际海事组织(IMO)只是将function做为翻译单位的范围, “静态”和“静态内联”function有什么区别? UPDATE 为什么要inline放在头文件,而不是.c文件?

为什么在标题中的C ++内联函数?

注意这不是一个关于如何使用内联函数或者它们如何工作的问题,更不是为什么它们按照它们的方式来完成。 类成员函数的声明不需要将函数定义为inline ,它只是函数的实际实现。 例如,在头文件中: struct foo{ void bar(); // no need to define this as inline } 那么为什么类函数的内联实现必须在头文件中呢? 为什么我不能把内联函数放在.cpp文件中? 如果我在哪里尝试将内联定义放在.cpp文件中,我会得到以下错误: error LNK2019: unresolved external symbol "public: void __thiscall foo::bar(void)" (?bar@foo@@QAEXXZ) referenced in function _main 1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe : fatal error LNK1120: 1 unresolved externals

链接器内联函数可以吗?

在文件file1.c ,有一个对文件file2.c实现的函数的调用。 当我将file1.o和file2.o链接到一个可执行文件中时,如果file2的函数非常小,链接程序是否会自动检测到该函数很小并且内联它的调用?

何时使用内联函数以及何时不使用它?

我知道内联是一个提示或请求编译器,它用于避免函数调用的开销。 那么在什么基础上可以确定函数是否是内联的候选者? 在这种情况下,应该避免内联?

内联虚函数真的是无意义的吗?

当我收到一个代码评论评论,说虚拟function不需要内联时,我得到了这个问题。 我认为内联虚函数可以在直接调用对象的场景中派上用场。 但是我想到的反驳是 – 为什么要定义虚拟然后使用对象来调用方法? 最好不要使用内联虚函数,因为它们几乎从来没有扩展? 我用于分析的代码片段: class Temp { public: virtual ~Temp() { } virtual void myVirtualFunction() const { cout<<"Temp::myVirtualFunction"<<endl; } }; class TempDerived : public Temp { public: void myVirtualFunction() const { cout<<"TempDerived::myVirtualFunction"<<endl; } }; int main(void) { TempDerived aDerivedObj; //Compiler thinks it's safe to expand the virtual functions aDerivedObj.myVirtualFunction(); //type of object […]

什么时候应该为函数/方法编写关键字“inline”?

什么时候应该在C ++中为函数/方法inline编写关键字? 看到一些答案后,有一些相关的问题: 什么时候我不应该在C ++中为函数/方法编写关键字'inline'? 编译器什么时候不知道何时做一个函数/方法“内联”? 当为函数/方法写入“内联”时,如果应用程序是multithreading的 ,这是否重要?

在C99中没有“静态”或“外部”有用吗?

当我尝试构建这个代码 inline void f() {} int main() { f(); } 使用命令行 gcc -std=c99 -oa ac 我得到一个链接器错误(未定义的参考f )。 如果我使用static inline或外extern inline而不是inline ,或者如果我使用-O编译(因此函数实际内联),错误消失。 这个行为似乎是在C99标准的6.7.4(6)中定义的: 如果翻译单元中的某个函数的所有文件范围声明都包含没有extern的inline函数说明符,则该翻译单元中的定义是内联定义。 内联定义不提供该函数的外部定义,也不禁止其他翻译单元中的外部定义。 内联定义提供了一个外部定义的替代方案,翻译人员可以使用该外部定义来实现对相同翻译单元中的功能的任何调用。 对函数的调用是使用内联定义还是外部定义是未指定的。 如果我正确地理解了这一点,那么在上面的例子中,一个带有inline函数的编译单元只能在一个外部函数名称相同的情况下一致地编译,而且我永远不知道是否调用了我自己的函数或外部函数。 这种行为是不是完全愚蠢? 在C99中定义没有static或extern函数的函数是否有用? 我错过了什么吗? 答案摘要 当然,我错过了一些东西,行为并不傻。 🙂 正如Nemo解释的那样 ,这个想法是把这个功能的定义 inline void f() {} 在头文件中只有一个声明 extern inline void f(); 在相应的.c文件中。 只有extern声明触发了外部可见二进制代码的生成。 在.c文件中确实没有使用inline – 它只在头文件中有用。 正如在Jonathan的答案中所引用的C99委员会的基本原理所阐明的那样, inline就是编译器优化,它要求函数的定义在调用的站点上可见。 这只能通过将定义放在头文件中来实现,当然,头文件中的定义在编译器看到的时候不能发出代码。 但是由于编译器并没有强制实际内联一个函数,所以外部定义必须存在。