C++--问题16--inline、static、宏的区别

C++--问题16--inline、static、宏的区别


(1)宏define定义的常量没有类型,只是进行了简单的替换,可能会有多个拷贝,占用的内存空间大,

(2)static的意思是静态的,可以用来修饰变量,函数和类成员。

  • 变量:被static修饰的变量就是静态变量,它会在程序运行过程中一直存在,会被放在静态存储区。局部静态变量的作用域在函数体中,全局静态变量的作用域在这个文件里。

  • 函数:被static修饰的函数就是静态函数,静态函数只能在本文件中使用,不能被其他文件调用,也不会和其他文件中的同名函数冲突。

  • 类:而在类中,被static修饰的成员变量是类静态成员,这个静态成员会被类的多个对象共用。被static修饰的成员函数也属于静态成员,不是属于某个对象的,访问这个静态函数不需要引用对象名,而是通过引用类名来访问。

(3)inline函数的调用点代码直接展开

         特点:没有开栈和清栈的开销,效率高。

1、作用域

         内联函数和宏函数的作用域为单文件,而静态函数的作用域为本文件。

2、可否调试

         inline修饰的函数在Debug版本可以调试,Release版本不可以调试。

         静态函数在Debug版本和Release版本里都可以调试。

        宏函数不可以调试(宏函数在预处理期就已经完成字符替换)。

3、有无类型检查

        inline函数和静态函数有类型检查,宏函数没有类型检查。

4、是否进行栈帧操作

       inline函数在Debug版本中进行栈帧操作,在Release版本不进行。

       静态函数在Debug版本和Release版本都进行栈帧操作。

       宏函数不会进行栈帧操作,在预编译期时直接在调用点展开。

5、效率

     inline函数的效率更高,宏函数的效率也高但是不安全,静态函数的效率比其它两个低。

Inline缺点:代码膨胀为代价,以空间换时间的概念。

建议:函数执行的开销   >    函数开栈的开销    建议用inline函数

猜你喜欢

转载自blog.csdn.net/qq_41103495/article/details/108854603
今日推荐