字符串作为C ++中宏的参数

时间:2016-03-29 19:25:59

标签: c++ macros g++

说我有这样的事情:

#include <iostream>  
#define OUTPUT(i) std::cout.operator<<(i)
using std::endl;


void main(){
string str("Test");
OUTPUT(str) << endl;
}

我用g ++运行它并编译,但它输出的似乎是字符串的地址。我查了一下如何做到这一点,但它给了我一个Microsoft C运算符(显然是#运算符),当我测试它时,给出了相同的输出,好像它没有{{1 }}。我想知道这是否可行。宏参数只能是否为整数,或者我应该将指针传递给char数组以进行输出。

编辑:

该代码具有非常明显的语法错误。让我再试一次。

#

1 个答案:

答案 0 :(得分:3)

没有像

这样的东西
 std::cout.operator<<(i)

其中i不是整数类型。

全球ostream& operator<<(ostream&, const T&)已超载。

对于整数类型,它应该有效,因为std::ostream提供overloads for these types

如评论中所述,只需将您的宏定义为

 #define OUTPUT(i) std::cout << (i)

Live Demo

虽然我没有注意到这一点。