首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么将C++中的fetestexcept编译为函数调用而不是内联

在C++中,fetestexcept是一个用于检查浮点异常的函数。它的作用是检查浮点操作是否引发了特定类型的异常,并返回一个表示异常状态的标志位。

将fetestexcept编译为函数调用而不是内联有以下几个原因:

  1. 可移植性:将fetestexcept编译为函数调用可以提高代码的可移植性。不同的编译器可能对于内联函数的处理方式不同,因此将其编译为函数调用可以确保代码在不同的编译器上都能正常工作。
  2. 可维护性:将fetestexcept编译为函数调用可以提高代码的可维护性。如果将其内联,那么每次使用fetestexcept的地方都需要进行相同的代码复制,这样会增加代码的冗余,并且当需要修改fetestexcept的实现时,需要修改所有使用到它的地方。而将其编译为函数调用可以将其实现集中在一个地方,方便维护和修改。
  3. 可扩展性:将fetestexcept编译为函数调用可以提高代码的可扩展性。如果将其内联,那么每次使用fetestexcept的地方都需要重新编译,这样会增加编译时间。而将其编译为函数调用可以将其实现与调用解耦,只需要在链接阶段进行符号解析,可以减少编译时间。

总结起来,将C++中的fetestexcept编译为函数调用而不是内联可以提高代码的可移植性、可维护性和可扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

是否还在疑惑Vue.js组件data为什么函数类型不是对象类型

name: '李四', age: '55' } } //数据渲染到页面上 //此处name会调用实例对象vm1.data.name {{ name }} //会渲染成...', age: '55' } } //数据渲染到页面上 //此处name会调用实例对象vm2.data.name {{ name }} //会渲染成...55' } } //创建了一个Vue实例,会调用上面的定义函数 let vm1 =new Vue() //此时vm1应该是这样 vm1 = { //这里data是获取了函数Vuedata...属性值 data: { name: '李四', age: '55' } } //数据渲染到页面上 //此处name会调用实例对象vm1.data.name {{ name...= { //这里data是获取了函数Vuedata属性值 data: { name: '李四', age: '55' } } //数据渲染到页面上 //此处name会调用实例对象

3.4K30

框架篇-Vue面试题1-为什么 vue 组件 data 是函数不是对象

在vue组件data属性值是函数,如下所示 export default { data() { // data是一个函数,data: function() {}简写 return...// data是一个对象 name: 'itclanCoder', }, }; 当一个组件被定义,data必须声明为返回一个初始数据对象函数,因为组件可能被用来创建多个实例 也就是说,在很多页面...,定义组件可以复用在多个页面 如果data是一个纯碎对象,则所有的实例共享引用同一份data数据对象,无论在哪个组件实例修改data,都会影响到所有的组件实例 如果data是函数,每次创建一个新实例后...,调用data函数,从而返回初始数据一个全新副本数据对象 这样每复用一次组件,会返回一份新data数据,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例各自独立,互不影响,保持低耦合 可以看下面一段代码...(p1,p2)都指向是同一份实体 原型下属性相当于是公有的 修改一个实例对象下属性,也会造成另一个实例属性跟着改变,这样在组件复用时候,肯定是不行,那么改成函数就可以了,如下代码所示 function

1.9K20

C++学习知识点

C#刚好相反。 (4)C++纯虚函数在C#叫虚构函数。...(5)C++中有指针类型,C#没有指针类型,C#delegate类型本质上就是C++函数指针,通俗来说就是类型化了函数指针,用于函数回调。 4....内联函数 答:作用:提高程序运行时调用函数效率。 用法:用关键字inline修饰,内联函数调用时,是调用表达式用内联函数体来替换,类似于宏定义。...(3)尽量基类析构函数定义为虚函数,当利用delete删除一个指向派生类定义对象指针时,系统会调用相应析构函数不将析构函数定义为虚函数时,只调用基类析构函数。...编译器在编译阶段对普通函数采用静态联方式,即在程序编译连接阶段决定程序 操作调用(函数调用)与执行该操作(函数)代码段之间映射关系。

1.7K20

C++动态联实现原理分析

代码编译运行环境:VS2017+Debug+Win32 ---- 所谓动态联,是指被调函数入口地址是在运行时、不是在编译时决定C++语言利用动态联来完成虚函数调用。...C++标准并没有规定如何实现动态联,但大多数C++编译器都是通过虚指针(vptr)和虚函数表(vtable)来实现动态联。...在不同编译器,虚指针在对象位置时不同。两种典型做法是: (1)在Visual C++,虚指针位于对象起始位置; (2)在GNU C++,虚指针位于对象尾部不是头部。...新声明函数,其入口地址就是在当前类函数入口地址。 d.所有虚函数入口地址按照排定次序写入虚函数。...(3)虚函数表是一个类所有对象共享,不是一个对象就拥有一个虚函数表,读者可自行验证。 以上代码描述是单继承情况下父类和子类函数表在内存结构,直观图示描述如下: ?

1.6K30

动态联实现原理分析

代码编译运行环境:VS2012+Debug+Win32 ---- 所谓动态联,是指被调函数入口地址是在运行时、不是在编译时决定C++语言利用动态联来完成虚函数调用。...C++标准并没有规定如何实现动态联,但大多数C++编译器都是通过虚指针(vptr)和虚函数表(vtable)来实现动态联。...两种典型做法是: (1)在Visual C++,虚指针位于对象起始位置; (2)在GNU C++,虚指针位于对象尾部不是头部。...新声明函数,其入口地址就是在当前类函数入口地址。 d.所有虚函数入口地址按照排定次序写入虚函数。...(3)虚函数表是一个类所有对象共享,不是一个对象就拥有一个虚函数表,读者可自行验证。

42220

闭关多日,整理一份C++那些重要又容易忽视细节

运算符重载 面试题:C++类自动提供成员函数 虚基类为什么需要虚析构函数?...内联函数则提供了另一种可能,对于内联函数,编译器在编译时候直接在调用函数展开,嵌入到调用函数,所以无需反复横跳,减少了时间开销,但是,增加了空间开销。...如果基类析构函数不是函数,在delete p时,调用析构函数时,只会看指针数据类型,不会去看赋值对象,这样就会造成内存泄露。...调用函数时,程序查看存储在对象vtbl地址,然后转向相应函数地址表。如果使用类声明定义第一个虚函数,则程序将使用数组第一个函数地址,并执行具有该地址函数。...3)每个函数调用都需要执行一部额外操作,即到表查找地址。 虽然非虚函数效率比虚函数稍高,但不具备动态联(Dynimac Blinding)功能。

57610

轻松搞定面试“虚”

纯虚函数只有函数名字不具备函数功能,不能被调用。它只是通知编译系统:“在这里声明一个虚函数,留待派生类定义”。在派生类对此函数提供定义后,它才能具备函数功能,可被调用。...是否每个类析构函数都要设置成virtual?是否可以析构函数设置成内联函数。 这样做是为了当用一个基类指针删除一个派生类对象时,派生类析构函数会被调用。...(动态绑定是根据对象动态类型不是函数名,在调用构造函数之前,这个对象根本就不存在,它怎么动态绑定?) 6.是否可以在析构函数或者构造函数调用函数? 在构造函数不要调用函数。...C++是不可以在构造父类对象部分时候调用子类函数实现。...动态联是指在程序执行时候才函数实现和函数调用关联,因此也叫运行时绑定或者晚绑定,动态联函数选择不是基于指针或者引用,而是基于对象类型,不同对象类型将做出不同编译结果。

65720

jvm之执行引擎解读

简单来说,JVM执行引擎充当了高级语言翻译为机器语言译者。   执行引擎工作流程 执行引擎在执行过程究竟需要执行什么样字节码指令完全依赖于PC寄存器。...高级语言也不是直接翻译成机器指令,而是翻译成汇编语言码,如下面说C和C++ C、C++源程序执行过程 编译过程又可以分成两个阶段:编译和汇编。...模板解释器每一条字节码和一个模板函数相关联,模板函数中直接产生这条字节码执行时机器码,从而很大程度上提高了解释器性能。...热点衰减 如果不做任何设置,方法调用计数器统计不是方法被调用绝对次数,而是一个相对执行频率,即一段时间之内方法被调用次数。...方法内联引用函数代码编译到引用点处,这样可以减少栈帧生成,减少参数传递以及跳转过程 去虚拟化:对唯一实现类进行内联 冗余消除:在运行期间把一些不会执行代码折叠掉 C2优化主要是在全局层面,

20130

JVM内存与垃圾回收篇第12章执行引擎

简单来说,JVM执行引擎充当了高级语言翻译为机器语言译者。 1.2、执行引擎工作过程 执行引擎工作过程 执行引擎在执行过程究竟需要执行什么样字节码指令完全依赖于PC寄存器。...高级语言也不是直接翻译成 机器指令 首先需要通过编译阶段,高级语言翻译为为汇编语言 再通过汇编阶段,生成汇编语言翻译成机器指令 如下面说C和C++ 3.5、程序编译流程 C、C++源程序执行过程...字节码解释器在执行时通过纯软件代码模拟字节码执行,效率非常低下。 模板解释器每一条字节码和一个模板函数相关联,模板函数中直接产生这条字节码执行时机器码,从而很大程度上提高了解释器性能。...方法内联引用函数代码编译到引用点处,这样可以减少栈帧生成,减少参数传递以及跳转过程 去虚拟化:对唯一实现樊进行内联 冗余消除:在运行期间把一些不会执行代码折叠掉 C2优化主要是在全局层面,...我们知道,即时编译指的是在程序运行过程字节码转换为可在硬件上直接运行机器码,并部署至托管环境过程。 AOT编译指则是,在程序运行之前,便字节码转换为机器码过程。

34820

c++入门】内联函数函数重载 详解!

前言 在上一篇文章我们了解到了命名空间和缺省函数存在,以及C++为什么要引入它们。本章继续C++在C语言上扩展出语法,以帮助大家快速入门。函数竟然还有内联形式?函数重载,重载是什么?...☁️C++支持函数重载原理 C++支持函数重载,但是C语言不支持函数重载,这是为什么呢? 在C/C++,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接 。...C语言编译后:函数名字修饰没有发生改变。 C++编译后:函数名字修饰发生改变,编译器函数参数类型信息添加到修改后名字。 以上我们可以看出gcc函数修饰后名字不变。...内联函数 ☁️内联函数概念 内联函数是一种特殊函数,它在调用时会被直接展开,不是通过函数调用方式进行执行。它通常被用来替代宏,以提高代码执行效率和可读性。...提高代码可读性:内联函数可以一些简单代码片段直接嵌入到调用处,使代码更加紧凑和易于理解。

14410

【基础篇】Python+Go——带大家一起另寻途径提高计算性能

/2 尝试在Python调用Golang代码/ 后来有幸接触到了Golang,使用了一端时间小就在想,Python要是能调用Go代码就好了,实在是不想学习C\C++,毕竟C\C++指针和自己释放内存还是比较有门槛.../5 Go代码编译为Python可调用.so文件/ 1)Go代码 功能:接收传入值进行累加,并且返回最终累加值。...,sum) return sum } func main() { //main函数什么都不要写,和包名main要对应 } 2)编译为.so文件供Python调用。...我们可以看到,虽然速度很快,但是Python在调用Go生成.so文件之后,拿到返回值竟然是错,但是在Go打印的确实对,这是为什么呢??? 不要慌,问题不大!...+Go提高关键地方性能和Python + C\C++相比不是最好,但是小认为该方法却是最省心,毕竟C\C++门槛是比较高

1.3K10

重学JS-1.3-知识点:V8引擎

---- V8是一个由Google开发开源JavaScript引擎,用于Chrome、Node.js等环境,作用是JS代码编译为不同CPU(Intel, ARM以及MIPS等)对应汇编代码。...Ignition会先将JavaScript转换为字节码(Bytecode),不是机器能直接执行机器码(Machine Code)。为什么需要这一步呢? 首先了解什么是字节码?...预解析(只验证语法是否有效、解析函数声明、确定行数作用域,不完全解析)。...如果函数调用多次,则它有可能会被识别为热代码,且Ignition收集类型信息证明可以进行优化编译的话,这时TurboFan则会将字节码编译为优化后机器码,以提高代码执行性能。...内联就是将相关联函数进行合并。

56010

内联函数 c-浅谈内联函数与宏定义区别详解

.");}   注意:   在内联函数如果有复杂操作将不被内联。如:循环和递归调用。   总结:   简单短小函数定义为内联函数将会提高效率。   ...文章(二)   8.5.1 用内联取代宏代码   C++ 语言支持函数内联,其目的是为了提高函数执行效率(速度)。   在 C程序,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来象函数。...如果assert是函数,由于函数调用会引起内存、代码变动,那么导致Debug版本与版本存在差异。所以assert不是函数,而是宏。...所以不要随便地构造函数和析构函数定义体放在类声明。   一个好编译器将会根据函数定义体,自动地取消不值得内联(这进一步说明了inline不应该出现在函数声明)。   ...显然,这种做法不会产生转去转回问题,但是由于在编译时函数代码被替代到程序,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码增加为代价来换取时间节省

62740

C++从入门到精通——内联函数

前言 内联函数是一种优化手段,通过在编译时函数调用替换为函数体本身复制品,以减少函数调用开销。它适用于函数体较小、调用频繁情况。使用内联函数可以提高程序执行效率,但也会增加最终生成代码大小。...一、内联函数概念 为什么会出现内联函数 C语言使用宏定义编写两数交换 引例:C语言可以使用宏定义实现两数交换功能。...在C语言中没有内联函数概念,我们通常会使用宏定义来实现,但是宏定义写法过于困难,如上所示宏定义实现交换,所以便在C++便提出内联函数这个概念,来替代宏定义写函数。...内联函数作用是在编译时函数代码嵌入调用地方,不是通过函数调用方式执行。...内联函数优点有以下几点: 减少函数调用开销:函数调用会涉及到栈操作、参数传递和返回值处理等,内联函数代码直接嵌入到调用地方,避免了这些开销。

8910

C++inline函数简介

从逻辑上来说,编译器对inline函数处理步骤一般如下: (1)inline函数体复制到inline函数调用点处; (2)为所用inline函数局部变量分配内存空间; (3)inline...也有人可能会觉得能否强制编译器进行函数内联不是建议编译器进行内联呢?...编译源文件为汇编代码或者反汇编查看有没有相关函数调用call,如果没有就是被inline了。具体可以参考here。 (7)C++类成员函数定义在类体内为什么不会报重定义错误?...6.小结 可以内联理解为C++对于函数专有的宏,对于C函数一种改进。对于常量宏,C++提供const替代;而对于函数宏,C++提供方案则是inline。...[6]C语言inline详细讲解 [7]C++作用域与生命周期 [8]内联函数到底有没有被嵌入到调用处呢?

1.9K20

CC++inline用法详解

是一种“用于实现关键字”,不是一种“用于声明关键字”。...int x, int y) { } 慎用内联 内联能提高函数执行效率,为什么不把所有的函数都定义成内联函数?...所以不要随便地构造函数和析构函数定义体放在类声明。 一个好编译器将会根据函数定义体,自动地取消不值得内联(这进一步说明 了inline 不应该出现在函数声明)。...C++ 语言支持函数内联,其目的是为了提高函数执行效率(速度)。 在C程序,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来象函数。...如果assert是函数,由于函数调用会引起内存、代码变动,那么导致Debug版本与Release版本存在差异。 所以assert不是函数,而是宏。

1.7K30

面试官:什么是宏定义和内联函数

在多次面试和笔试当中也收获了许多经验,日后如果有时间,我也分享一些有意思东西。 好了,废话少说,回归到今天主题。今天想要分享内联函数和宏定义。在我某次笔试也出现过一次。...题目大意问是在C语言和C++中分别用什么来处理一段短小、反复被调用代码。我虽然回答出来了,但其实我当时并不是特别了解内联函数,只是听过而已。今天就来稍微理一理。...为什么要引入内联函数呢?主要是为了消除函数调用系统开销,以提高运行速度。...我们知道,在调用函数时候,系统要将程序一些状态信息存到栈,然后再跳转执行,在参数保存和传递过程是需要时间和空间开销,使得效率下降,特别是在频繁地调用函数时候。...这里使用C++,本来想用C,但是在我vscode上好像不支持inline,干脆就用C++了。 既然宏定义和内敛函数都可以完成替换,为什么还要引入内联函数呢?

1.5K20

C++函数——内联函数&函数指针

内联函数调用时,并不会向普通函数一样从主函数跳转到函数,而是直接内联函数代码逻辑替换进主函数,提高运行效率。...,一个是add函数定义,并且每个函数前都有“inline”,我们便“add”函数定义为内联函数,那么在代码调用时就是add函数定义替换为调用部分代码,如上面的test(),在编译时候就会自动转为...,不是在我们写这个小函数。...这样会导致程序运行时间开销太大。 C++内联函数则提供了一种替代方法,使用inline关键字,编译器用函数代码本身替换函数调用语句,然后再编译整个代码。...4、内联函数通过使用指令缓存来增加引用局部性 5、通过将其标记为内联,您可以函数定义放入头文件 缺点: 1、由于代码扩展,它增加了可执行文件大小 2、c++内联在编译时解决。

2.4K21

C++基础——函数

默认参数 C++可以在函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数值,编译器会自动用默认值代替一旦在一个函数调用开始使用默认参数值,那么这个参数后所有参数都必须使用默认参数 void...虚函数作用,用专业术语来解释就是实现多态性 (Polymorphism),多态性是接口与实现进行分离,虚函数C++ 多态性主要体现,指向基类指针在操作它多态类对象时,会根据不同类对象,调用其相应函数...虚函数使用原则: 1)当类不会用作基类时,成员函数不要声明为virtual 2)当成员函数不重新定义基类方法,成员函数不要声明为virtual inline内联函数   内联函数由 编译器处理,直接编译后函数体插入调用地方...因此,当函数执行开销远大于压栈,跳转和返回所用开销时,那么内联无意义。...C++内联编译限制: 1.不能存在任何形式循环语句 2.不能存在过多条件判断语句 3.函数体不能过于庞大 4.不能对函数进行取址操作 5.函数内联声明必须在调用语句之前。

59740
领券