C++之引用2
2015-09-16 18:55
246 查看
1.用引用返回值
函数返回值时,会生成一个副本,而用引用返回值时,不生成新的副本。
For example:
Float temp;
Float fn1(float r)
{
Temp=r*r*3.14;
Return temp;
}
Float fn2(float r)
{
Temp=r*r*3.14;
Return temp;
}
上面的temp是全局变量。
下面有4种赋值方式:
(1)Float a=fn1(5.0);
(2)Float &b=fn1(5.0);
(3)Float c=fn2(5.0);
(4)Float &d=fn2(5.0);
第(1)中方式是直接赋值,是fn1函数中的返回值的生成的副本赋值给a;
第(2)中方式是错误的,因为不能把一个临时的副本赋值给一个引用。这时可以这样用:
float s=fn1(5.0);float &b=s;
(3)方式是fn1函数中的temp直接赋值给c,并没有先生成一个副本,然后再赋值给c。
(4)方式是fn2函数中的temp直接赋值给引用d,即是d就是temp的引用。但是这种方式存在一定风险,如果,temp是临时变量,这种做法就是错误的。
2.引用作为左值是很危险的,
如fn2(5.0)=12.4;
3.传递指针和引用更大的目的是效率。当一个数据类型很大时,因为传值要复制副本,所以不可取。所以以后写算法时,尽量要用引用还有指针进行提升效率,较少运行时间。
函数返回值时,会生成一个副本,而用引用返回值时,不生成新的副本。
For example:
Float temp;
Float fn1(float r)
{
Temp=r*r*3.14;
Return temp;
}
Float fn2(float r)
{
Temp=r*r*3.14;
Return temp;
}
上面的temp是全局变量。
下面有4种赋值方式:
(1)Float a=fn1(5.0);
(2)Float &b=fn1(5.0);
(3)Float c=fn2(5.0);
(4)Float &d=fn2(5.0);
第(1)中方式是直接赋值,是fn1函数中的返回值的生成的副本赋值给a;
第(2)中方式是错误的,因为不能把一个临时的副本赋值给一个引用。这时可以这样用:
float s=fn1(5.0);float &b=s;
(3)方式是fn1函数中的temp直接赋值给c,并没有先生成一个副本,然后再赋值给c。
(4)方式是fn2函数中的temp直接赋值给引用d,即是d就是temp的引用。但是这种方式存在一定风险,如果,temp是临时变量,这种做法就是错误的。
2.引用作为左值是很危险的,
如fn2(5.0)=12.4;
3.传递指针和引用更大的目的是效率。当一个数据类型很大时,因为传值要复制副本,所以不可取。所以以后写算法时,尽量要用引用还有指针进行提升效率,较少运行时间。
相关文章推荐
- C++类型转换
- C++多行文本读取
- 详解C++中的对象指针与对象数组
- 逆波兰运算器浮点求值(c++版本)
- C++之const运用
- 详解C++编程中的析构函数
- 解析C++中构造函数的默认参数和构造函数的重载
- 两种重载运算符
- VisualC++2012 Compiler Warning C4566
- 字节对齐
- C++的感想
- c++输出输入流
- 字典
- C/C++ 获取格式化时间字符串
- C++类成员的初始化
- C++的重载(overload)与重写(override
- 二维数组作为参数的函数定义及调用方法
- C++中有了malloc/free 为什么还要new/delete
- 很好的mysql,c++,db,java,hadoop等笔记收集
- 【C++拾遗】 C++函数重载、重写、重定义的区别