在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
void g(string &a,const string &b) { cout<<"a address :"<<&a<<endl; cout<<"b address :"<<&b<<endl; // return a; } string f() { } int main() { string input="I love you"; int a=1; // int b=2; cout<< "input address: "<<&input<<endl; const char *b="***"; cout<<"b address: "<<&b<<endl; g(input,b); // g(input,input); getchar(); return 0; } 可以看到g函数的参数一个为string& 一个为 const string& 我们将input="I love you"和const char *b="***";作为参数传入g函数,分别打印传入前和传入后变量的地址我们来看一下结果。 可以看到将字符串常量传给g函数的const string&参数打印出的地址与传入的地址不同,这说明函数自动生成了一个临时变量将字符串常量自动转化为string类型。
那我们再看另一个例子1 string f(); 2 string g(string & str); 3 4 g(f()); 5 g("abc"); 程序编译在4,5行出错,这是为什么呢。 第5行的错误可以由上面的例子解释,当引用参数与实参不匹配,但可以通过转化为引用类型时,要将引用声明为const。 第4行的错误可以知道,将一个临时变量作为实参传递给参数时,也同样需要将参数类型设为const。
以上是针对string类型的参数做的实验,那么其他类型的参数是不是也同样是这样的规则呢?
1 void g(int &a,const char &b) 2 { 3 cout<<"a address :"<<&a<<endl; 4 cout<<"b address :"<<&b<<endl; 5 6 // return a; 7 } 8 9 string f() 10 { 11 } 12 int main() 13 { 14 15 int a=1; 16 int b=2; 17 cout<< "a address: "<<&a<<endl; 18 cout<<"b address: "<<&b<<endl; 19 20 g(a,b); 21 22 // g(input,input); 23 24 getchar(); 25 return 0; 26 } 我们将参数参数改为int& 和 const char&引用,将两个整形变量传递给函数。发现结果和上面一样,同样产生了临时变量。
总结在c++中当函数参数为引用时。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论