【问题标题】:C++ macros with define or inline? [duplicate]带有定义或内联的 C++ 宏? [复制]
【发布时间】:2011-08-03 21:00:03
【问题描述】:

可能重复:
Inline functions vs Preprocessor macros

在 C++ 中引入了内联函数来替换 C 风格的宏(#define 宏名...),但我仍然看到很多 C++ 代码使用旧的 C 风格的宏而不是内联函数,内联函数不如旧的 C 风格的宏?

【问题讨论】:

    标签: c++ macros c-preprocessor inline-functions


    【解决方案1】:

    我会说宏不如内联函数。

    内联函数是类型安全的,而宏不是。这是他们最大的优势。编译器正在帮助您编写更好的代码。

    话虽如此,宏可以做一些函数不能做的事情。不过这样的东西并不多……

    我相信 C 程序员已经习惯了宏,只是将他们的习惯延续到 C++ 中。

    【讨论】:

    • 那么,作为一个 C++ 程序员,使用内联而不是宏基本上是一个更好的习惯?
    • 是的,使用你的内联函数。
    • 有关可以使用宏但不能使用内联函数的示例,请参阅:stackoverflow.com/questions/4790515/…
    【解决方案2】:

    我能想象的唯一仍然使用宏的事情之一是将 LINEFILE 宏合并到日志语句中

    例如:

    #DEFINE TRACE(S) vGenericLogStatement(__FILE__,__LINE__, s)
    

    vGenericLogStatement 的定义类似于:

    void vGenericLogStatement(char* fileName, int line, char* traceMesg);
    

    它们也是有用的快速和脏的字符串连接。

    【讨论】:

      【解决方案3】:

      我不会说他们低人一等。在 C++ 中,你可以用宏做的事情并不多,你不能用内联函数或模板获得相同的效果。我唯一能想到的是 '#' stringize 宏操作符,如果 Boost 也有办法做到这一点,我也不会感到惊讶。

      但是,当涉及到常量时, 宏有一个优势——它们通常不会占用任何数据空间,而是直接写入指令流。在内存占用较小的系统上,这可能是一个主要考虑因素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多