美文网首页
inline、explicit关键字小结

inline、explicit关键字小结

作者: coolTigers | 来源:发表于2019-12-17 23:22 被阅读0次

inline

发生函数调用时,首先在栈内存上为形参分配内存,再将实参的值复制给形参,在函数局部还需要为变量分配内存,执行完还要将函数的返回地址放到栈内存中。如果调用开销甚至多于函数内部执行开销,那么这个调用是浪费性能的,需要进行优化。inline关键字的作用正是为了解决函数频繁调用大量消耗栈内存的问题,用inline修饰的函数叫做内联函数。
inline的实现原理是编译器在编译期间将整个内联函数体的代码插入到调用语句处。优点是不会发生函数调用,提升运行效率;缺点是插入代码会使最终可执行程序的大小增加。因此只有简单几个语句,快速执行的函数适合声明为内联函数。

inline
int min(int a, int b)
{
    if (a < b) {
        return a;
    }
    return b;
}

需要注意的地方:
a、编译器在判断内联函数时是审慎的,如果有人把一个开销的函数声明为inline,编译器会识破这个“恶作剧”,即inline声明只是一个“建议”,而决定权在编译器手中;
b、定义在类中的成员函数默认都是内联函数;或者类中函数声明为内联,在类外定义时需要加上inline修饰;
c、由于inline的实现原理限制,内联函数不能调用本身,不能包含复杂的结构控制语句例如while、switch等。

explicit

explicit关键字用于修饰类的构造函数,作用是禁止隐式调用构造函数。
cpp文档中是如此说明的:
This keyword is a declaration specifier that can only be applied to in-class constructor declarations . An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object 。

#include <iostream>

using namespace std;
class Test
{
public:
    explicit Test(int _a) :a(_a){};
    int a;
};
int main()
{
    Test t1 = 1; // 不存在从int转换到Test的合适的构造函数
        Test t2(2); 
    return 0;
}

t1初始化那行发生了int到Test类型的隐式转换,由于explicit关键字,该行为被禁止。

相关文章

  • inline、explicit关键字小结

    inline 发生函数调用时,首先在栈内存上为形参分配内存,再将实参的值复制给形参,在函数局部还需要为变量分配内存...

  • 内联函数

    # 一、简述 inline关键字放在函数返回类型前,函数实现处必须写inline关键字。关键字inline在函数声...

  • C++11/14/17

    关键字:auto, nullptr, explicit, final, override, constexpr,...

  • C++ explicit 关键字

    C++ explicit 关键字 最近学习的过程中经常看到explicit这个关键字, 于是去了解了一下. 没好好...

  • C++中关键字explicit简析

    C++中关键字explicit的作用 最近学习Qt经常会遇到explicit关键字,那么简单的说一下吧。 在C++...

  • 2020-04-16【explicit】

    explicit关键字详解 C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明...

  • const,static,extern简介

    解释关键字 static,const,inline,Static,inline,volatilestatic 修饰...

  • c++的一些不常见关键字

    1. explicit关键字 explicit用来防止由构造函数定义的隐式转换,比如:class Base bas...

  • 编译出错

    查找错误关键字 Caused by Unable to find explicit activity class ...

  • explicit 关键字

    1. explicit介绍 类的构造函数被声明为explicit方式,可以用来阻止隐式类型转换,但被声明为expl...

网友评论

      本文标题:inline、explicit关键字小结

      本文链接:https://www.haomeiwen.com/subject/iwoenctx.html