
C++
不要在不必要的时候写宏!那么,什么情况才需要使用宏?例如涉及__LINE__宏的场景,或者静态反射注册等。不过需要注意的是,对于__LINE__宏,现代
C++已经提供了std::source_location作为替代方案,在许多情况下用函数实现会更加合适。现代编译器的优化能力远超
人类预期,启用优化后,编译器会自动将短函数内联,因此完全不必担心频繁调用短函数带来的性能问题。此外,constexpr函数能够在编译期完成计算,其效率甚至优于传统的宏定义。更重要的是,函数具备类型安全性,而宏则容易引发各种错误。当你将一个函数的结果传递给宏时,结果可能完全不可预测:宏内部到底调用了几次这个函数?是否产生了意外的副作用?这些问题都难以追踪。至于很多人提到的inline关键字,它在现代
C++中早已不再单纯表示内联提示,而是允许函数的重复定义。编译器是否真正内联某个函数,通常并不依赖inline关键字。如果希望强制编译器倾向于内联,可以使用forceinline或always_inline等属性,但目前这些机制尚未标准化。