inline相关内容
假设我有一个函数 functionProxy,它接受一个泛型参数 function 并调用它的 operator(): 模板 传递给它的对象可能是: 一个函子: struct 函子 {void operator()() const {std::cout
..
我搜索了 Stack Overflow 以了解类似函数的宏与内联函数的优缺点. 我发现了以下讨论:不同宏函数/内联方法的优缺点在 C ...但它没有回答我的主要问题. 也就是说,就内存使用和执行速度而言,在 c 中使用宏函数(带有变量,可能还有其他函数调用)与内联函数的开销是多少? 在开销方面是否存在任何依赖于编译器的差异?我可以使用 icc 和 gcc. 我正在模块
..
在 C++ 中,方法是否只有在显式声明inline(或在头文件中定义)时才会被内联,还是允许编译器按照他们认为合适的方式内联方法? 解决方案 是的,编译器可以内联代码,即使它没有显式声明为 inline. 基本上,只要语义不改变,编译器几乎可以对生成的代码做任何它想做的事情.该标准不会对生成的代码强制执行任何特殊操作.
..
在文件 file1.c 中,调用了在文件 file2.c 中实现的函数.当我将 file1.o 和 file2.o 链接成一个可执行文件时,如果 file2 中的函数很小,链接器会自动检测到函数很小并且内联了它的调用? 解决方案 除了 Jame McNellis 提到的对链接时间代码生成 (LTCG) 的支持之外,GCC 工具链还支持链接时间优化.从 4.5 版开始,GCC 支持 -flt
..
如何在 C# 中执行“内联函数"?我不认为我理解这个概念.他们喜欢匿名方法吗?像 lambda 函数? 注意:答案几乎完全涉及内联函数,即“手动或编译器优化,用被调用者的主体替换函数调用站点".如果您对匿名(又名 lambda)函数感兴趣,请参阅@jalf 的回答 或 每个人都在谈论的“Lambda"是什么?. 解决方案 最后在 .NET 4.5 中,CLR 允许使用 MethodI
..
//这个 e 有效document.getElementById("p").oncontextmenu = function(e) {e = e ||窗口事件;var target = e.target ||e.srcElement;控制台日志(目标);};//这个 e 是未定义的功能做某事(e){e = e ||窗口事件;var target = e.target ||e.srcElement;
..
我有一个 XML 文件和一个外部 XSLT 文件. 目前,在我的 XML 中,我使用 href 引用外部 XSLT 链接:
..
__attribute__((always_inline)) 是否强制 gcc 内联函数? 解决方案 是. 来自 文档 v4.1.2 来自文档最新 always_inline 通常,除非指定优化,否则不会内联函数.对于声明为内联的函数,即使未指定优化级别,该属性也会内联函数.
..
假设我在源文件中有这个小函数 static void foo() {} 并且我构建了我的二进制文件的优化版本,但我不希望内联此函数(出于优化目的).有没有我可以在源代码中添加的宏来防止内联? 解决方案 你想要 gcc 特定的 noinline 属性. 这个函数属性防止从被考虑的功能内联.如果函数没有有副作用,有除了内联之外的优化导致函数调用被优化离开,虽然函数调用是居住.为了防止
..
我注意到 GHC 手册说“对于自递归函数,循环断路器只能是函数本身,因此始终忽略 INLINE 编译指示." 这不是说map、zip、scan*、fold*、sum 等不能内联? 当你使用它们时,你总是可以重写所有这些函数,添加适当的严格标签,或者使用像“流融合"推荐的花哨技术此处. 然而,这一切不是极大地限制了我们编写既快速又优雅的代码的能力吗? 解决方案 确实,GHC
..
由于模板是在头文件中定义的,并且编译器能够确定内联函数是否有利,这是否有意义?我听说现代编译器更了解何时内联函数,而忽略了 inline 提示. 编辑:我想接受这两个答案,但这是不可能的.为了结束这个问题,我接受了 Sebastian Mach 的回答,因为它获得了最多的选票,而且他在形式上是正确的,但正如我在评论中提到的,我认为 Puppy 和从不同的角度来看,组件 10 的答案也是正确的
..
仅当布尔变量设置为 True 时,我才需要打印一些东西.因此,在查看了 this 后,我尝试了一个简单的例子: >>>一 = 100>>>b = 真>>>如果 b 打印 a文件“",第 1 行如果 b 打印 a^语法错误:无效语法 同样的事情,如果我写print a if b==True. 我在这里遗漏了什么? 解决方案 Python 没有没有尾随if 语句. Pyth
..
在 Kotlin 中,当我有一个非公共成员和一个调用它的 inline fun 时,会出现编译错误: Error:(22, 25) Kotlin: Public-API inline function cannot access non-public-API private fun f(): Unit 在 com.example 中定义 我找到了几种在公共 inline fun 中调用
..
根据 C++ 规范,以下两个类是否等价定义? A 类{无效 f(){}};B级{内联 void f(){}}; 即,将“内联"限定符放在类定义中定义的此类成员函数上是否完全多余? 后续问题:假设它是多余的,对于代码风格,保留“内联"标签是否明智,因此未来的开发人员意识到应该内联该函数,并且不会删除其他地方的定义并删除内联? 谢谢:) 解决方案 它们是等价的类定义,除了单一定
..
我相信,inline 已经过时了,因为我阅读了这里: 无论您如何将函数指定为 inline,编译器都可以忽略该请求:编译器可能会内联扩展您调用的部分、全部或不扩展指定为 inline 的函数. 然而,Angew 似乎理解了一些我不理解的东西.在这个问题中他和我来回走了不少弯路,关于inline是否还在有用. 这个问题不是关于: 的问题 inline 的历史使用或 inline
..
我知道根据定义内联成员函数应该进入标题.但是如果无法将函数的实现放入头文件中怎么办?让我们来看看这种情况: 文件 A.h #pragma once#include "B.h"A类{乙乙;}; 文件 B.h #pragma onceA级;//前向声明B类{内联一个 getA();}; 由于循环包含,我必须将getA的实现放入 B.cpp #include "B.h"#inclu
..
我无法理解以下行为:一个标头具有一些基本类型,另一个标头在多个函数中使用这些类型.之后我开始根据我定义的类型和函数构建类.如果我留下以下签名,则在函数头中: void nothingFunction(参数) 链接器指出whateverFunction有多个定义.现在,如果将其更改为: inline voidwhateverFunction(parameters) 链接问题消失了,所有编译和
..
通过电子邮件将图像作为嵌入图像发送到正文时出现问题.图像文件显示为附件,没问题,但内嵌图像部分仅显示为红色 x. 这是我目前所拥有的 LinkedResource inline = new LinkedResource(filePath);inline.ContentId = Guid.NewGuid().ToString();MailMessage 邮件 = new MailMessag
..
模型的逻辑是: 一个Building有很多Rooms 一个 Room 可能在另一个 Room 内(例如一个壁橱——ForeignKey on 'self') 一个 Room 只能在同一个建筑物内的另一个 Room 内(这是棘手的部分) 这是我的代码: #spaces/models.py从 django.db 导入模型类建筑(模型.模型):名称=models.CharField(m
..
我知道内联是对编译器的提示或请求,用于避免函数调用开销. 那么根据什么可以确定一个函数是否适合内联呢?在哪种情况下应该避免内联? 解决方案 避免函数调用的成本只是故事的一半. 做: 使用 inline 而不是 #define 非常小的函数非常适合内联:更快的代码和更小的可执行文件(更多机会留在代码缓存中) 这个函数很小并且经常被调用 不要: 大型函数:导致
..