inline相关内容

内联是在编译时还是运行时完成?

我以前认为编译器决定是否在编译时插入一个函数。 但是我在“Effective C ++”中找到了这个代码示例: inline void f(){} //假设编译器愿意内联调用f void )()= f; // pf points to f f(); //这个调用将被内联,因为它是一个“正常”调用 pf(); //这个调用可能不会,因为它是通过一个函数指针 ..
发布时间:2016-11-03 00:49:53 C/C++开发

内联函数vs #define

可能重复: 内联函数与预处理器宏 在C ++中,内联函数限定符基本上将该函数替换为#define伪指令,而不是一遍又一遍地调用该函数。因此,减少开销时间,但同时增加程序大小。 如果我对内联函数的理解是正确的,inline和#define有什么不同? / p> 解决方案 inline 编译器可以忽略的提示 #define 为了在宏中安全地放置多个语句,必须将 ..
发布时间:2016-11-02 02:51:44 C/C++开发

如果我声明一个大函数作为内联函数怎么办?

我搜索了一些相关问题(例如 C ++中内联函数的优点) a>),但是我仍然有问题。 如果内联函数只是为了提供一个简单的机制,使编译器应用更多的优化。 然后我可以将每个函数设置为内联函数吗? 如果我错误地将函数设置为 解决方案 仅使用 inline 才能满足单一定义规则。由于性能原因,不要打扰 inline 。 如果内联函数“为 编译器提供一个简单的机制来应用更多优化。 ..
发布时间:2016-11-01 21:19:49 C/C++开发

通过LLVM在c / c ++程序中找到所有可能的路径

我正在尝试通过LLVM在我的程序中找到任何可能的路径。现在我可以找到我的代码中所有函数的入口到出口BB的路径。但这不是我需要的。我需要的是扩展CFG(也许通过内联函数调用?!)有一个CFG的整个源代码和查找路径在这个扩展的CFG。 我想使用-inline pass首先内联所有函数,然后运行我的pathfinder pass但是我观察到-inline只适用于在代码(cpp文件)中明确提到的内联函数 ..
发布时间:2016-11-01 20:33:54 C/C++开发

G ++不接受C ++中的内联构造函数

我有一个问题,可能是哑的。 事情是,我无法内联一个类中的构造函数。 考虑我有一个名为Foo的类。 如果我写的Foo的实现像这样: class Foo { int p; public: Foo(){p = 1; } }; 或甚至像这样: class Foo { int p; public: Foo(); }; inline ..
发布时间:2016-10-30 02:35:08 C/C++开发

C ++ / VS2008:宏的性能与内联函数的性能

全部, 我正在写一些性能敏感的代码,包括一个3d矢量类,将执行大量的交叉产品。作为一个长期的C ++程序员,我知道宏的邪恶和内联函数的各种好处。我一直以来的印象是,内联函数应该与宏大致相同的速度。但是,在性能测试宏vs内联函数中,我发现了一个有趣的发现,我希望是我在某个地方犯了一个愚蠢的错误的结果:我的函数的宏版本似乎是内联版本的8倍! 首先,一个简单的向量类的修剪版本: c ..
发布时间:2016-10-28 05:59:29 C/C++开发

内联函数具有非内联副本

在Agner Fog的优化C ++手册中,他有一个“内联函数具有非“” 函数内联具有复杂功能,可以从另一个模块调用相同的函数。编译器必须对内联函数进行非内联复制,以便从另一个模块调用该函数的可能性。如果没有其他模块调用该函数,这个非内联复制是死代码。代码的这种碎片化使缓存的效率降低。 让我们来测试一下。 foo.h inline double foo(double x){ ..
发布时间:2016-10-28 04:34:57 C/C++开发

如何强制g ++内联函数?

在使用Haskell FFI到C / C ++时,我最近遇到了一个关于C ++内联函数的问题。 也就是说,g ++不是真正的内联函数,声明为 inline ,并为它们生成符号。最终,当ghci尝试加载调用内联函数的对象文件时,会产生链接器错误: 加载对象.o ... done 加载对象(动态)/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so . ..
发布时间:2016-10-26 22:07:48 C/C++开发

内联函数机制

我知道内联函数不使用堆栈来复制参数,但它只是替换了函数的主体,无论它被调用。 考虑这两个函数: inline void add(int a){ a ++; } //什么都不做,a不会被改变 inline void add(int& a){ a ++; } //更改 的值 如果堆栈不用于发送参数,编译器如何知道变量是否将被修改? inline ..
发布时间:2016-10-25 14:44:44 C/C++开发

C ++类中的内联规则是什么?

从我在很久以前读到的东西,似乎如果你想在编译阶段内联类成员函数,函数必须在类声明块中定义。 但这有一个细节泄漏的缺点。 IMHO,其他程序员只能在打开.h文件时看到类接口。 现代C ++中第一条语句是否仍然成立?有没有办法强制内联的函数声明,最好是在另一个文件中? 一般来说,更好的方法是在类声明块中保留短成员函数, ? 解决方案 似乎如果你想在编译阶段内联类成员函数, ..
发布时间:2016-10-24 16:41:52 C/C++开发

内联这个函数还是不行?

我应该实现一个函数比较两个字符串类似 strcmp 但忽略空白字符,所以 strcmpignorews(“abc”,“abc”) 应该给出相同的结果。 这是我的实现: 命名空间{ void SkipWhitespace(const char *& s){ for(; std :: isspace(* s,std :: locale :: classic ..
发布时间:2016-10-24 14:47:04 C/C++开发

内联这个函数还是不行?

我应该实现一个函数比较两个字符串类似 strcmp 但忽略空白字符,所以 strcmpignorews(“abc”,“abc”) 应该给出相同的结果。 这是我的实现: 命名空间{ void SkipWhitespace(const char *& s){ for(; std :: isspace(* s,std :: locale :: classic ..
发布时间:2016-10-24 14:40:09 C/C++开发

内联这个函数还是不行?

我应该实现一个函数比较两个字符串类似 strcmp 但忽略空白字符,所以 strcmpignorews(“abc”,“abc”) 应该给出相同的结果。 这是我的实现: 命名空间{ void SkipWhitespace(const char *& s){ for(; std :: isspace(* s,std :: locale :: classic ..
发布时间:2016-10-24 13:47:02 C/C++开发

是否必须在同一个文件中定义一个C ++内联函数?

我在一个名为 ex.h 的头文件中定义了一个 show() ex.cpp 中的函数。我预计这将给我一个错误,因为编译器不知道要替换的位置 show()函数被调用。但是因为我使用的IDE,它工作正常。这是怎么回事? 当我尝试手动编译它时,我给了一个错误, show() 函数的定义(之间的部分)是必须的, {...} )放在头文件中,除非该函数仅在一个 .cpp 文件中使用。 特别是,如 ..
发布时间:2016-10-24 13:18:40 C/C++开发

命名空间中的inline函数在gcc上链接期间生成重复的符号

我有一个命名空间与inline函数,如果几个源文件将被使用。 当尝试链接我的应用程序时,内联函数报告为重复的符号。 好​​像我的代码只是不内联函数,我想知道这是否是预期的行为和如何最好地处理它。 我使用以下gcc选项: -g -Wextra -pedantic -Wmissing-field-initializers -Wredundant-decls -Wfloat-equal -W ..
发布时间:2016-10-24 12:59:25 C/C++开发