C++函数(const与引用一点理解)

来源:互联网 发布:武汉知豆电动汽车4s店 编辑:程序博客网 时间:2024/06/08 05:38
 
C++是一种静态强类型语言,对于每一次的函数调用,编译时都会检查其实参,所以如果出现实参和形参不匹配(个数不匹配,类型不匹配)则会报错,当然,如果是能够强制转换的类型也是可以的,比如:实参为int,形参为double,这样会编译通过,因为int可强制转换成double,只是丢失精度.大多数编译器会因此发出警告,不过我用VC6.0编译并没有警告信息出现.
 
关于const形参:如果一个函数的形参参数类型为const,则调用时,实参既可是const,也可是非const.
如:void fun1(const int x) {}
void main() {int x;const int y;fun1(x);fun1(y);}
都是合法的,对于实参是非const的调用,在函数中不能通过x修改值.
对于引用的时候则会不同:
如:void fun1(string &s) {}
void main() {fun1(“Hello”); }//会出错,因为Hello是一个常量.
void fun2(const string str) {
       fun1(str); //也会报错,因为str是const类型的
}
所以,如果不打算在函数修改参数的话,就把参数设置为const类型的
如:void fun1(const string &s) {}就不会出现以上错误
否则就会出现一系列错误,只能允许非常量,非const类型的变量当实参.可以又有人问了,为什么要设计成引用的,有什么好处.哈,引用可以减少复制时所花费的空间&&时间,当然,你的参数如果是基本数据类型的话,那是基本上…..,但如果是大型对象的话,就麻烦了.
 
如果我们想通过函数调用修改两个指针指向的内容,该怎么写形参呢?如下:
void ptrswap() {},括号里面要怎么写?
void ptrswap(int *&v1,int *&v2) {
       int *temp = v1;
       v1 = v2;
       v2 = temp;
}
即可,达到目地,我们分析一下,从右至左理解,首先,v1是一个引用,与指向int型对象的指针相关联.也就是说,v1只是传递进ptrswap函数的任意指针的别名.
 
原创粉丝点击