宏在C++中的优势

S..*_*..K 7 c++ macros inline c-preprocessor

我们知道内联是有利的,因为它们被编译器检查,并且与宏相比,当作为参数传递时,相同的操作(如++ x)不会评估多次.

但是在一次采访中,我被问到当宏更有利于在C++中内联时的具体优势或情况.

有谁知道答案或者可以对这个问题进行思考?

Jer*_*ner 15

我唯一能想到的是你可以使用内联函数无法完成的一些技巧.在编译时将令牌粘贴在一起,以及那种hackery.

  • 自动知道文件名和行号是另一个有用的技巧,只能用于宏. (11认同)

Joh*_*ing 8

这是一个特殊情况,宏不仅是首选,它们实际上是完成某些事情的唯一方法.

如果你想编写一个记录功能,它不仅记录一些消息,而且记录实例发生的位置的文件和行号,你可以直接调用你的函数,直接输入文件和行值(或宏):

LogError("Something Bad!", __FILE__, __LINE__);
Run Code Online (Sandbox Code Playgroud)

...或者,如果您希望它自动运行,您必须依赖宏(警告:未编译):

#define LogErrorEx(ERR) (LogError(ERR, __FILE__, __LINE__))
// ...
LogErrorEx("Something Else Bad!");
Run Code Online (Sandbox Code Playgroud)

使用模板,默认参数,默认构造或C++中的任何其他设备无法实现这一点.