【发布时间】:2016-03-13 14:05:13
【问题描述】:
我尝试制作应该交换参数值的 makro。我的代码:
#include <iostream>
using namespace std;
#define swap(x,y) \
x = x * y; \
y = x / y; \
x = x / y;
int main() {
int a = 1;
int b = 2;
swap(a,b);
cout << "a: " << a << ", b: " << b << endl; // a = 2 and b = 1
system("pause");
return 0;
}
我是 C++ 新手,谁能告诉我为什么我不能那样做?
【问题讨论】:
-
为什么是宏?为什么不简单地
std::swap? -
swap(2, 4)会产生什么结果?这些不是变量,因此根本无法交换。您想更改其余代码中2和4的含义吗? -
这个宏很容易出错。编译失败的情况很多。
-
@Cleo 您希望
swap(2,4);的实际结果是什么?那4现在是新的2,反之亦然?你应该和一些有经验的数学家彻底讨论。 -
对于数字类型,您可以查看this answer for C。然而,在 C++ 中使用这样的宏简直是一个可怕的想法,因为它很容易出错。
标签: c++