宏是一种文本替换设施 ,宏替换发生在编译器的预处理阶段,此时 C++ 的语法和语义规则并未去作用,无法对宏的进行任何检查,这将为后续生成代码的编译埋下隐患。此外。宏语法仅能理解小括号和方括号 ,并不识别 template 的方括号 <> .举例:
MACRO( Foo<int, double> )
虽然 Foo<int, double> 是一个 C++ 实体,但是上面的宏将解读为传入 Foo<int 和 double> 两个参数。
C++ 中用于取代宏的语法:
常数 —— 使用 const 和 enum ;
函数展开 ——inline 内联函数
名称冲突 ——namespace
通用函数 ——template