按名称调用/按价值调用



我试图理解这里的代码块:

#include <iostream>
using namespace std;
#define mymult(a, b) a*b
inline int mymult1(int a, int b) {return a*b;}
int main() {
cout << "mymult(2+2, 3+3) = " << mymult(2+2, 3+3) << "n";
cout << "mymult1(2+2, 3+3) = " << mymult1(2+2, 3+3) << "n";
}

mymult=11和mymult1=24。我知道'#define本质上是通过名称调用来工作的,而不是通过值调用。然而,我很难理解为什么它返回的值是11…而不是24。是什么原因造成的?

选项1:在以下情况下:

#define mymult(a, b) a*b

ab被视为占位符字符串,当您调用mymult时,参数ab只是在写入时复制的。换句话说:

mymult(2+2, 3+3) = 2+2*3+3

其中CCD_ 6。

因此,您可以按如下方式调用mymult

mymult( (2+2), (3+3) )

其中CCD_ 8。

这将被解释为:

mymult( (2+2), (3+3) ) = (2+2)*(3+3)    

并按预期返回CCD_ 9的值。

选项2:如果允许我们修改#define语句,那么另一种方法是用括号定义它,如下所示:

#define mymult(a, b) (a)*(b)

这将给出相同的预期结果,因为ab将直接放入括号中。换句话说:

mymult(2+2, 3+3) = (2+2)*(3+3) = 24
where a = 2+2, b = 3+3.

选项3:坚持使用OP:中定义的内联函数

inline int mymult(int a, int b) {return a*b;}

祝你好运!

相关内容

  • 没有找到相关文章

最新更新