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

什么时候该用 inline 修饰函数

问题 什么时候该用 inline 函数?具体有以下几个问题, 什么时候不应该用 inline 函数? 怎么让编译器不去 inline 函数?...如果一个 inline 函数被多个线程调用,会有性能上的影响么? 回答 先介绍下何谓 inline 函数,即内联函数。 inline 和宏定义 #define 的作用基本类似,都是替换或者展开。...在程序编译阶段,如果遇到内联函数,则将内联函数的实现在当前位置展开。内联的目的是为了减少函数的调用开销,从而提高运行效率,但会增加代码体量。...也就是说,对内联函数进行任何修改,都需要重新编译调用该函数的所有文件代码,因为编译器需要重新更换一次这个内联函数,否则将会继续使用旧的函数。 注意: 内联只是一种建议,并不要求编译器必须执行。...如果这个函数的定义也放在头文件,那么你应该用 inline 修饰它。 什么时候不应该用 inline 函数? 函数执行时间可能较长,比如含有 for、switch、递归等。

1K20

什么时候调用layoutSubviews

如果你想强制更新布局,不要直接调用此方法。你可以调用setNeedsLayout方法;如果你想立即数显你的views,你需要调用layoutIfNeeded方法。...layoutSubviews以下情况会被调用 苹果官方文档已经强调,不能直接调用layoutSubviews对子视图进行重新布局。那么,layoutSubviews什么情况下会被调用呢?...通过百度搜索,发现以下几种情况layoutSubviews会被调用。 直接调用setLayoutSubviews。(这个在上面苹果官方文档里有说明) addSubview的时候。...我简单测试了一下,上面基本都会被调用。 注意: 当view的fram的值为0的时候,`addSubview`也不会调用`layoutSubviews`的。...可以自己动手,深入理解layoutSubviews的调用机制。

42710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    什么时候使用虚析构函数

    问题 什么时候该定义虚析构函数,为什么要这么做? 回答 当你通过一个基类指针去删除(delete)派生对象的时候,虚析构函数就很用了。...输出如下: Base Constructor Called Derived constructor called Base Destructor called 我们发现派生类的析构函数并没有调用,这是有问题的...,有可能会造成内存泄漏,而解决这个问题的办法就是将 Base 的析构函数定义为虚(virtual), class Base { public: Base(){ cout <<...,否则你就应该定义为虚, 这个基类没有派生类 不在堆(heap)内存实例化 没有指向派生类的基类指针或引用 对于 1,还是很常见的,有的时候我们只是单纯的写一个类,并没有派生它的打算,那这个时候就无需将它的析构函数定义为虚...对于 3,基本上也不太可能,派生类的存在基本上都会用到它的基类指针和引用。

    91520

    JS箭头函数 什么时候用 ,什么时候不能用,我总结出了4点

    前言 大家好,我是zz,相信大家平时在码代码中,都知道箭头函数的用法,但是在面试中,让他讲讲箭头函数的用法,都讲的很片面,通过阅读本文,我们带大家系统的总结下箭头函数,形成自己的箭头函数的知识结构,这样在面试是面试官问到就小菜一碟...}; ac(); } } z() 复制代码 什么时候不能用箭头函数 1....通过构造函数调用 let Foo = () => { } let result = new Foo(); //TypeError: Foo is not a constructor 复制代码...总结 如果你有一个简单语句的在线函数表达式,其中唯一的语句是return某个计算出的值,而且这个函数内部没有this引用,且没有自身引用(比如递归,事件绑定/解绑定),且不会要求函数执行这些,那么我们可以安全的把它重构为...=>箭头函数 如果你的内层函数表达式依赖于它的函数中调用 let self= this 或者.bind(this)来确保适当的this绑定,那么内层函数表达式可以转换为=>箭头函数 如果你的内函数表达式依赖于封装函数像

    1.3K00

    二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值?

    「再来看返回值,递归函数什么时候需要返回值?什么时候不需要返回值?」 在文章二叉树:我的左下角的值是多少?...中,我给出了一个结论: 「如果需要搜索整颗二叉树,那么递归函数就不要返回值,如果要搜索其中一条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要及时返回。」...中,因为要遍历树的所有路径,找出深度最深的叶子节点,所以递归函数不要返回值。 而本题我们要找一条符合条件的路径,所以递归函数需要返回值,及时返回,那么返回类型是什么呢? 如图所示: ?...递归函数是有返回值的,如果递归函数返回true,说明找到了合适的路径,应该立刻返回。...路径总和II 详细的讲解了 递归函数什么时候需要返回值,什么不需要返回值。 这两道题目是掌握这一知识点非常好的题目,大家看完本篇文章再去做题,就会感受到搜索整棵树和搜索某一路径的差别。 对于112.

    2.3K50

    在什么时候需要用到常引用const---情景

    在C++里面,使用常引用主要就是为了提高我们的程序的效率和安全性; 场景分析: 1.避免拷贝大对象 大对象就是内容量大,占用的内存多,使用普通的引用就会降低我们的程序开发的效率,因为要进行拷贝操作,我们使用...const&常引用可以避免这个拷贝的操作,提高我们的程序性能; 2.保持对象的不可变性 就是使用我们的const常引用可以让我们的这个定义的对象无法被其他的人进行修改,提高我们的代码的安全性; 3.避免对象的切片问题...对象的切片指的就是我们的这个我们的派生类给这个基类的时候,我们的这个派生类的成员变量和函数会被丢失,这个就是在进行值传递的时候发生的; 我们使用常引用可以避免这个对象的切片问题,子类的这个函数和变量不会被丢失...; 4.传递类对象给函数 这个是C++的精髓,对于默认的成员变量,我们进行默认拷贝构造的时候没有问题,但是当有指针的时候,因为会进行这个默认构造函数的调用,原来的对象和我们的新的拷贝对象公用相同空间,就会出现浅拷贝的问题...这个泛用性就是可以支持我们的左值引用和右值引用,可以让我们的这个函数接受任意类型的参数,提高泛用性就是接受的参数类型比较多,提高我们的程序的参数普适性;

    5810

    迟来的函数传参补充——传引用【引用调用】【c++】

    1、传引用 函数传参,几乎一直在用简单的值传递,或者传指针,前者生成一个源结构的副本,后者链表或者树的时候用的比较多,本文补充到一个类似值传递的函数调用方式,函数定义的传参位置却是地址接收方式,这就是传引用...f(int &,int &); 1.2.2、常量引用 稍微讲究一点的用法,往往是定义一个输出函数的传入参数设为常引用,意味着无更改要求。...&); 1.3、案例 1.3.1、常见变量引用做函数参数 比如实现一个交换两个变量的值,过去确实只会值传递,像是涉及到改变值的操作,都会下意识的去写在main函数中,将结果在传给下一个需要相关值的函数...有了引用,main函数会变得更加简洁。...除非参数结构很小,否则一般会通过引用将结构体传递给函数。

    17230

    浅谈自执行函数(立即调用的函数表达式)

    立即调用的函数表达式(Immediately-Invoked Function Expression)。...以下是截取该参考博文的例子: // 自执行函数。自己调用自己(递归) function foo() { foo(); } // 自执行的匿名函数。...加一个标示名称,可以方便Debug (function foo() { /* code */ } ()); // 立即调用的函数表达式(IIFE)也可以自执行,不过可能不常用罢了 (function...个人愚见:上面例子中把 自执行 解释成 “自己调用自己”,当然和 立即执行 相差很大了。但如果把 自执行 解释成 “自动执行”,就和 立即执行 异曲同工了。...参考内容: 深入理解JavaScript系列(4):立即调用的函数表达式 Immediately-Invoked Function Expression (IIFE)

    3.6K30

    查询与引用函数——offset函数

    今天要跟大家分享的是一个强大的查询与引用函数——offset函数! OFFSET函数的语法参数相对比较多,但是因为参数位置和函数都比较固定,所以只要能够理解各自含义,应用起来就会很方便。...offset(起始位置单元格,移动行数,移动列数,引用行数,引用列数) ? ? =OFFSET(A1,2,0,1,1) 上例中函数语法:从A1单元格开始,移动2行,0列,引用一行,一列。...对应引用区域刚好是A3单元格(B地区)。 offset函数更多的使用在动态引用单元格或者制作动态图表的数据源。...=OFFSET(A1,$P$2,0,1,1) 使用列表框,结合offset函数,我们也可以实现动态引用。...P$2行,0列,然后再引用1行1列。

    1.7K70

    【JavaScript】函数 ① ( 函数引入 | 函数声明 | 函数调用 )

    中 ; JavaScript 函数 是一段可以重复使用的代码块 , " 函数 " 可以 接受 若干输入参数 , 在 函数体 中进行 计算 或 执行操作,并返回 返回值 ; 借助 函数 可以 组织和重用代码...字符串 ; 3、函数调用 函数声明后 , 本身不会自动执行 函数体中的代码 , 只有 调用函数后 , 才会执行 函数体代码 ; 函数调用 语法格式 : functionName(argument1, argument2..., ...); functionName 是 要调用函数 的 函数名 ; argument1, argument2, ......是传递给函数的 实参列表 , 该 实参列表 与 函数定义的 形参列表一一对应 , 这些实际参数值值将替换函数定义中的形式参数 , 并在函数执行时 作为 函数体的 局部变量 使用 ; 4、代码示例 - 函数声明调用...`); } // 调用函数 hello('Tom'); 执行结果

    16410

    Android | View.post 到底是在什么时候执行的?

    ); return true; } 代码看起来非常清楚明了,主要可以分为两部分 如果 attachInfo 不为 null ,则直接获取它的 handler 将 action 发送出去 否则就调用...WindowManager 创建完 ViewRootImpl 后会调用他的 setView 方法 public void setView(View view, WindowManager.LayoutParams...其实这个问题也不是特别难,因为 performTraversals 方法也是通过 handler 发送的,在执行 mTraversalRunnable 的时候才对 mAttachInfo 进行的赋值,然后再执行绘制流程...执行的时候,使用 mattachInfo.handler 发送的消息肯定会在 View 绘制的任务之后执行 如果你对 View 的添加流程和绘制流程不太熟悉,这里推荐两篇文章对你会有一点帮助 Android...,在该方法中执行肯定就可以保证任务是在绘制流程之后执行的,我们继续跟进一下执行的方法: // public void executeActions(Handler handler) { synchronized

    56310

    Python 函数调用&定义函数&函数参

    一.函数调用 在python中内置了很多函数,我们可以直接调用 。...想要调用函数首先要知道函数的名称及包含的参数,还可以通过查看python官方的文档:https://docs.python.org/3/library/functions.html 就拿abs()函数来举例...用来返回数值的绝对值 >>> abs(-5) 5 二.定义函数  我们可以通过def 来自定义函数,格式为 def  函数名(参数): 举一个定义计算两个数值相乘的函数: 1 def product...(x,y): 2 return x*y 3 print(product(3,4)) 三.函数参数 位置参数 上述的定义的函数里的参数 x,y就为位置参数 默认参数 1 def power(x,...= [1,2,3,4] 7 print(variable(*nums)) #在list或tupe的前面加一个*号,把lsit或tupe变为可变参数引入进去 在参数前加一个* 就定义为可变参数了,再调用函数时可以传入任意参数并自动组装为一个

    2.5K10

    「Python」函数返回值、嵌套调用、执行结果

    一、函数的返回值 函数返回值的作用: 在程序开发中,有时候会希望一个函数执行结束后,告诉调用者一个结果,一遍调用者针对具体的结果做后续的处理。...-- 二、函数的嵌套调用 函数嵌套调用含义: 一个函数里面又调用了另外一个函数,这就是函数嵌套调用 如果函数test2中调用了另外一个函数test1 执行步骤: 那么执行到调用函数test1函数时,辉县吧函数...,首先执行第一行代码告诉解释器这是一个函数test1,那么不用管继续向下执行,又碰到第6行的第二个函数test2,也不用管继续向下执行,好了到了第15行调用函数test()这一行代码,那么根据函数的调用步骤...,调转到第6行去执行test2函数里面的代码,输出第7行第8行代码,继续向下执行,到了第11行调用函数test1,那么跳到函数test1定义的位置执行函数test1里面的代码,执行完test1函数里的第...3行代码后再调到函数test2里面调用函数test1的位置继续向下执行到第12行代码,执行完第12行代码后整个函数test2执行结束,执行结束后直接跳转到test2函数调用的位置,继续向下行走发现没有其他代码了程序终止

    2.2K20
    领券