在C ++中引入了内联函数来替换C风格的宏(#define macroname ...),仍然,我看到很多C ++代码使用旧的C风格宏而不是内联函数,内联函数不如旧C风格的宏?
答案 0 :(得分:4)
我会说宏不如内联函数。
内联函数是类型安全的而宏不是。这是他们的最大优势。编译器正在帮助您制作更好的代码。
话虽如此,有些东西可以做宏,功能却无法做到。虽然这些东西并不多......
我相信C程序员已经习惯了宏,只是将他们的习惯继续用于C ++。
答案 1 :(得分:0)
我可以想象的唯一仍然使用宏的方法之一是将 LINE 和 FILE 宏合并到日志记录语句中
例如:
#DEFINE TRACE(S) vGenericLogStatement(__FILE__,__LINE__, s)
其中vGenericLogStatement的定义类似于:
void vGenericLogStatement(char* fileName, int line, char* traceMesg);
它们也是有用的快速和脏字符串连接。
答案 2 :(得分:0)
我不会说他们是劣等的。在C ++中,使用内联函数或模板无法获得相同效果的宏所用的功能并不多。我唯一能想到的是'#'stringize宏运算符,如果Boost有办法做到这一点我也会感到惊讶。
然而,当谈到常数时, 宏可以有一个优点 - 它们通常不会占用任何数据空间,但会直接写入指令流。在具有小内存占用的系统上,这可能是一个主要考虑因素。