C++ C++;宏是定义的还是内联的?

C++ C++;宏是定义的还是内联的?,c++,macros,c-preprocessor,inline-functions,C++,Macros,C Preprocessor,Inline Functions,可能重复: 内联函数在C++中被引入以取代C风格宏(α定义MaRONAMEY…),但我还是看到很多C++代码使用了旧C风格宏而不是内联函数,内联函数不如老C风格宏(< P>),我认为宏不如内联函数。 内联函数是类型安全的,而宏不是。这是他们最大的优势。编译器正在帮助您生成更好的代码 尽管如此,宏可以做一些函数不能做的事情。但是这些东西并不多 P>我相信C程序员习惯了宏,只是习惯性地继续C++。 我会说宏不如内联函数。 内联函数是类型安全的,而宏不是。这是他们最大的优势。编译器正在帮助您生成更

可能重复:


内联函数在C++中被引入以取代C风格宏(α定义MaRONAMEY…),但我还是看到很多C++代码使用了旧C风格宏而不是内联函数,内联函数不如老C风格宏(

< P>),我认为宏不如内联函数。 内联函数是类型安全的,而宏不是。这是他们最大的优势。编译器正在帮助您生成更好的代码

尽管如此,宏可以做一些函数不能做的事情。但是这些东西并不多


<> P>我相信C程序员习惯了宏,只是习惯性地继续C++。

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

尽管如此,宏可以做一些函数不能做的事情。但是这些东西并不多


<> P>我相信C程序员习惯了宏,只是习惯性地继续进入C++。

< P>我能想象的唯一一个仍然使用宏的东西是:<强>行和<强>文件< /Stult>宏被合并到日志语句

中。 例如:

#DEFINE TRACE(S) vGenericLogStatement(__FILE__,__LINE__, s)
其中vGenericLogStatement的定义如下:

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

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

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

例如:

#DEFINE TRACE(S) vGenericLogStatement(__FILE__,__LINE__, s)
其中vGenericLogStatement的定义如下:

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

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

我不会说它们是劣等的。在C++中,宏的作用不大,不能用内联函数或模板获得相同的效果。我唯一能想到的就是“#”stringize宏操作符,如果Boost也有办法做到这一点,我也不会感到惊讶

但是说到常数,
宏有一个优点——它们通常不会占用任何数据空间,而是直接写入指令流。对于内存占用小的系统,这是一个主要考虑因素

我不会说他们不如我。在C++中,宏的作用不大,不能用内联函数或模板获得相同的效果。我唯一能想到的就是“#”stringize宏操作符,如果Boost也有办法做到这一点,我也不会感到惊讶

但是说到常数,
宏有一个优点——它们通常不会占用任何数据空间,而是直接写入指令流。对于内存占用小的系统,这是一个主要考虑因素

那么,作为一个C++程序员,使用内联而不是宏,它基本上是一个更好的习惯吗?是的,使用你的内联函数。对于一个你可以用宏做的事情,但是不能用内联函数来做的例子,请看:那么,作为一个C++程序员,使用内联而不是宏,它基本上是一个更好的习惯吗?使用内联函数。有关可以使用宏但不能使用内联函数的示例,请参阅: