C++中对宏的使用已经处处限制,并提倡使用内联函数。
编译器对宏的处理是在预处理器阶段,然而预处理器宏存在了一些问题,比如没有安全检查,行为容易混淆。
在C++中,任何在类中定义的函数自动成为内联函数,你也可以使用inline关键在在外面定义函数前面使之成为内滥函数。
内联函数为何有效?
对于任何函数,编译器在它的符号表中放入函数类型(即包括名字、函数原型、参数类型已经返回类型)的信息。对于内联函数,编译器还将其代码也放入到符号表中。
在调用一个内联函数时,编译器首先确保调用正确。当所有的函数类型的信息符合调用的话,内联函数代码就会直接替换函数调用,消除了调用的开销,从而带来了效率。
当然,不要以为内联函数就是万能的。假如函数太复杂,编译器将不能执行内联。这种情况下,编译器将会以普通函数对待。因为如果使用内联的话,调用函数的开销并没有得到多大的较少,反而代码的提起在没有任何人注意的情况下膨胀。
也并非所有地方的宏都停止使用。这里有三个地方:字符串定义,字符串串联和标志粘贴。
比如:
#define DEBUG(X) cout<<#X<<"="<<X<<endl
#define FIELD(A) char * A##_string;int A##_size
内联函数
最新推荐文章于 2025-02-27 19:30:44 发布