HI ,
有人可以帮助我理解为什么 SQUARE(x) 的值为 49 吗?
我正在使用 Visual C++ 6.0 。
#define SQUARE(X) X * X
int main(int argc, char* argv[])
{
int y = 5;
printf("%d\n",SQUARE(++y));
return 0;
}
尼尔·巴特沃斯、马克和帕维尔是对的。
SQUARE(++y) 扩展为 ++y * ++y,它增加 y 值的两倍。
您可能遇到的另一个问题:SQUARE(a + b) 展开为 a + b * a + b,这不是 (a+b)*(a+b) 而是 a + (b * a) + b。在定义宏时,您应该注意在需要时在元素周围添加括号:#define SQUARE(X) ((X) * (X)) 风险较小。 (伊恩·坎普(Ian Kemp)首先在他的评论中写道)
您可以使用内联模板函数(运行时效率同样高),如下所示:
template <class T>
inline T square(T value)
{
return value*value;
}
您可以检查它是否有效:
int i = 2;
std::cout << square(++i) << " should be 9" << std::endl;
std::cout << square(++i) << " should be 16" << std::endl;
(不需要写
square<int>(++i)
因为 int 类型对于 i 来说是隐式的)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)