C ++中内联和宏之间的区别
内容
宏是在调用时扩展的指令。也可以定义函数,例如宏。同样,内联函数在调用时也会扩展。内联函数和宏函数之间的主要区别是 内联函数 在扩展 汇编和 巨集 当程序由 预处理器.
让我们借助比较表研究内联和宏之间的区别。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 排队 | 巨集 |
---|---|---|
基本的 | 内联函数由编译器解析。 | 宏由预处理器扩展。 |
句法 | 内联return_type funct_name(参数){。 。 。 } | #定义宏名char_sequence |
使用关键字 | 排队 | #限定 |
已定义 | 它可以在类的内部或外部定义。 | 它总是在程序开始时定义。 |
评价 | 它仅对参数求值一次。 | 每次在代码中使用参数时,它都会评估参数。 |
扩张 | 编译器可能未内联并扩展所有功能。 | 宏总是被扩展。 |
自动化 | 在类内部定义的短函数会自动转换为内联函数。 | 宏应特别定义。 |
存取中 | 内联成员函数可以访问类的数据成员。 | 宏永远不能是该类的成员,并且不能访问该类的数据成员。 |
终止 | 内联函数的定义以内联函数结尾的花括号结束。 | 宏的定义以新行结束。 |
调试 | 对于内联函数,调试很容易,因为在编译过程中会进行错误检查。 | 对于宏来说,调试变得很困难,因为在编译过程中不会进行错误检查。 |
捆绑 | 内联函数将函数主体中的所有语句很好地绑定在一起,并且函数主体以大括号开头和结尾。 | 如果宏具有多个语句,则它会遇到绑定问题,因为它没有终止符号。 |
内联的定义
内联函数看起来像常规函数,但是前面加上关键字“排队”。内联函数是短长度的函数,在调用时会进行扩展,而不是被调用。让我们通过一个例子来了解内联函数。
#包括 在上面的程序中,我声明并定义了函数initialize()作为类“ example”中的内联函数。 initialize()函数的代码将在由“ example”类的对象调用的地方扩展。在类example实例中定义的display()函数未声明为内联,但编译器可将其视为内联,例如在C ++中,考虑到函数的长度,编译器会自动将类内部定义的函数内联。 宏是“预处理程序指令”。在编译之前,该程序将由预处理程序进行检查,无论在程序中的哪个位置找到宏,它都会通过其定义替换该宏。因此,宏被视为“替换”。让我们以一个例子来研究宏。 #包括 在上面的代码中,我声明了一个宏函数GREATER(),该函数比较并发现两个参数的数量更多。您可以观察到没有分号来终止宏,因为宏仅由新行终止。由于宏只是替换,因此它将在调用宏的地方扩展其代码。 内联函数比宏函数更具说服力。 C ++还提供了一种更好的定义常量的方法,该常量使用“ const”关键字。
宏的定义
结论: