C++ initial value of reference to non-const must be an lvalue
QUESTOIN:
当我把值通过引用指针的方式传入函数的时候,编译器报错。
#include <iostream>
using namespace std;
void swap(int* &p1, int* &p2){
int* temp = p1;
p1 = p2;
p2 = temp;
}
int main(){
int num1 = 1;
int num2 = 2;
swap(&num1, &num2)
return 0;
}
Error : initial value of reference to non-const must be an lvalue
ANSWER:
当通过一个non-const引用传递一个指针时,你是在告诉编译器您想要修改那个指针的值,至少编译器是这样认为的。
因为我们经常通过引用传递来改变实参的值,但在这里,同一次运行程序的时候一个变量的地址是不会改变的。
解决:将 p1
声明为指针常量.
void swap(int* const &p1){
int* temp = p1;
p1 = p2;
p2 = temp;
}
或者在调用swap
之前先给 num1
和 num2
的地址赋给一个新的指针:
int num1 = 1;
int num2 = 2;
int* pNum1 = &num1;
int* pNum2 = &num2;
swap(pNum1, pNum2);