C++ c+中宏的运算符重载+;

C++ c+中宏的运算符重载+;,c++,macros,printf,operator-overloading,cout,C++,Macros,Printf,Operator Overloading,Cout,嗨,我有一个关于宏的示例程序 #include<iostream> #define ABS(a) (a) < 0 ? -(a) : (a) int main(){ printf("%d",ABS(-1)); std::cout<<ABS(-1); return 0; } #包括 #定义ABS(a)(a)

嗨,我有一个关于宏的示例程序

#include<iostream>
#define ABS(a) (a) < 0 ? -(a) : (a)

int main(){
    printf("%d",ABS(-1));
    std::cout<<ABS(-1);
    return 0;
}
#包括
#定义ABS(a)(a)<0-(a) :(a)
int main(){
printf(“%d”,ABS(-1));

std::cout理解宏是纯文本替换,因此cout变成:


std::cout宏在编译之前执行搜索和替换,因此
printf(“%d”,ABS(-1));
变成
printf(“%d”),(a)<0?-(a):(a))
,而
std::cout“它抛出了一个错误”:请解释错误是什么。此外,不要将宏用于类似的操作。请改用函数模板。标准库中已经有一个实现,名为
std::abs
。请从阅读错误消息开始。在编译器不如现在那么擅长优化的时候,这样的宏有其独特的功能使用。但是现在,您想要使用宏的情况非常罕见(例如,仅为某些平台或编译器启用代码)一般来说,如果你是C++新手,你不应该使用它们。@我知道我只是在尝试一些事情,我只想知道为什么它会这样做,而且错误是关于操作符重载本身的??我很清楚,但是我想要的是为什么CUT抛出了操作符重载错误,为什么PrTrF成功地给出了答案?
Severity    Code    Description Project File    Line    Suppression State
Error   C2678   binary '<': no operator found which takes a left-hand operand of type 'std::basic_ostream<char,std::char_traits<char>>' (or there is no acceptable conversion)  practice_project    C:\Users\source\repos\practice_project\Source.cpp   10