【发布时间】:2024-04-12 00:50:02
【问题描述】:
您好,我有一个关于宏的示例程序,
#include<iostream>
#define ABS(a) (a) < 0 ? -(a) : (a)
int main(){
printf("%d",ABS(-1));
std::cout<<ABS(-1);
return 0;
}
在上面的 prgram 中,我试图用 MACRO 中的 -1 替换,但如果我尝试用 printf 打印它,它会起作用!但如果我使用 cout 它会引发错误。我知道这与 " 运算符的重载有关,但我不知道确切的原因。请问有人可以解释吗?提前致谢。
编辑:
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
这是具体造成的错误吗?所以我的问题不在于为什么我不应该使用 MACROS ,我的问题是为什么 printf 给了我答案,为什么不给 cout?
【问题讨论】:
-
"它抛出一个错误":请解释错误是什么。另外,不要将宏用于类似的事情。请改用函数模板。标准库中已经有一个实现,也称为
std::abs。 -
从阅读错误信息开始。
-
在编译器不像现在这样擅长优化的时候,像这样的宏就派上了用场。但是现在你想使用宏的情况真的很少见(例如,只为某些平台或编译器启用代码)。一般来说,如果你是 C++ 新手,你不应该使用它们。
-
@walnut 我知道我只是在尝试一些东西,我唯一想要的是它为什么会这样?并且错误与运算符重载本身有关??
标签: c++ macros printf operator-overloading cout