说我有这样的事情:
#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数组以进行输出。
编辑:
该代码具有非常明显的语法错误。让我再试一次。
#
答案 0 :(得分:3)
没有像
这样的东西 std::cout.operator<<(i)
其中i
不是整数类型。
全球ostream& operator<<(ostream&, const T&)
已超载。
对于整数类型,它应该有效,因为std::ostream
提供overloads for these types。
如评论中所述,只需将您的宏定义为
#define OUTPUT(i) std::cout << (i)
虽然我没有注意到这一点。