我有这个功能,它自己添加一个数字.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
#define ADD(x) (x)+(x)
int main()
{
int x = 2;
int y = ADD(++x);
cout << y << endl;
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序时,它返回8但我期待6.
我认为x = 3并且它正在向ADD函数发送3,但它似乎没有.有人可以向我解释一下吗?
Chr*_*ckl 11
你的程序有不确定的行为,因为你正在调用preincrement运算符两次:int y = (++x)+(++x);.你没有收到编译器警告吗?
问题是这ADD 不是一个功能.这是一个宏观; 它执行文本替换.不要在C++中使用宏来做这些事情.
如果你将宏转换为一个函数,一切都会正常工作,因为++x只出现一次:
#include <iostream>
template <class T>
T add(T x)
{
return x + x;
}
int main()
{
int x = 2;
int y = add(++x);
std::cout << y << '\n';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |