使用引用参数计算函数
Evaluating a function with reference parameters
#include <iostream>
using namespace std;
template <class T>
void swap1(T& a, T& b) {
T c = a;
a = b;
b = c;
}
int main() {
int n1 = 5;
int n2 = 7;
swap1(n1, n2);
cout << n1 << " " << n2 << endl;
int *p1 = &n1;
int *p2 = &n2;
swap1(*p1, *p2);
cout << n1 << " "<< n2 << endl;
}
在许多语言中,调用函数时,首先计算其参数,然后将函数应用于计算结果。
然而,如果我们在这里遵循这个规则,swap1(n1, n2)
和swap1(*p1, *p2)
都会评估为swap1(5, 7)
这是没有意义的。
那么,在这种情况下,评估规则是什么?另外,在C++中评估函数的一般规则是什么?
在许多语言中,调用函数时,首先计算其参数,然后将函数应用于计算结果。
这正是C++发生的事情。但是,我们必须分析"评估函数的参数"实际上意味着什么。在C++中,它的意思是"使用指定为参数的表达式复制初始化参数"。复制初始化C++引用的方法是绑定到初始化器定义的实体。在左值引用的情况下(如在你的swap
中),这意味着初始化器必须是左值。 n1
是一个左值,*p1
也是如此。由于引用需要一个左值,这就是所有要做的评估。
如果参数是值类型(不是引用),则在初始化值旁边将应用左值到右值的转换。但由于我们正在初始化引用,因此不会发生此转换。
相关文章:
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何计算函数的时间复杂度?
- 有没有办法计算函数内arry的长度而不是作为参数传入?
- 如何计算函数的搜索复杂度
- 使用引用参数计算函数
- 递归计算函数f = n!/(c^n)的值
- 为什么这个C++字符串长度计算函数比另一个更快
- 用递归计算函数f(n)
- C++平均计算函数返回0
- 有没有比生成/累积更快的方法来计算函数结果的平均值
- 如何计算函数的时间
- 由于标识符未知,LLDB 无法计算函数
- 从 C++11 中的列表中选择并计算函数
- 计算后缀表达式.pop() 返回不正确的值来计算函数
- 在计算函数返回值之前或之后是否销毁了局部变量
- 计算函数指针的类型
- 计算函数中的模给出了与直接使用%运算符不同的答案
- 提升:以秒/毫/微米/纳米为单位计算函数的运行时间
- 行列式计算函数的优化
- 如何在c++中计算函数的执行时间和cpu消耗