Name/Call 按值调用
Call by Name/Call by Value
我想在这里理解这段代码:
#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 本质上是通过按名称调用而不是按值调用来工作的。但是,我无法理解为什么 returns 的值是 11... 而不是 24。这是什么原因造成的?
选项 1:
在以下情况下:
#define mymult(a, b) a*b
a
和 b
被视为占位符字符串,当您调用 mymult
时,参数 a
和 b
只是按原样复制被写了。换句话说:
mymult(2+2, 3+3) = 2+2*3+3
其中 a = 2+2, b = 3+3
.
因此您可以调用 mymult
如下:
mymult( (2+2), (3+3) )
其中 a = (2+2), b = (3+3)
.
这将被解释为:
mymult( (2+2), (3+3) ) = (2+2)*(3+3)
和 return 24
的值符合预期。
选项 2:
如果允许我们修改 #define
语句,那么另一种方法是用括号定义它,如下所示:
#define mymult(a, b) (a)*(b)
这将给出相同的预期结果,因为 a
和 b
将按原样直接放入括号中。换句话说:
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;}
祝你好运!
我想在这里理解这段代码:
#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 本质上是通过按名称调用而不是按值调用来工作的。但是,我无法理解为什么 returns 的值是 11... 而不是 24。这是什么原因造成的?
选项 1: 在以下情况下:
#define mymult(a, b) a*b
a
和 b
被视为占位符字符串,当您调用 mymult
时,参数 a
和 b
只是按原样复制被写了。换句话说:
mymult(2+2, 3+3) = 2+2*3+3
其中 a = 2+2, b = 3+3
.
因此您可以调用 mymult
如下:
mymult( (2+2), (3+3) )
其中 a = (2+2), b = (3+3)
.
这将被解释为:
mymult( (2+2), (3+3) ) = (2+2)*(3+3)
和 return 24
的值符合预期。
选项 2:
如果允许我们修改 #define
语句,那么另一种方法是用括号定义它,如下所示:
#define mymult(a, b) (a)*(b)
这将给出相同的预期结果,因为 a
和 b
将按原样直接放入括号中。换句话说:
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;}
祝你好运!