C++函数返回引用
来源:互联网 发布:编程要学哪些东西 编辑:程序博客网 时间:2024/06/05 15:26
首先需要明白:C++函数为什么要返回引用?
答:这样就不用返回结果的副本。因为返回副本需要做赋值拷贝函数,浪费时间。这时候,实际上,返回是结果的副本,而不是结果本身。如果要返回本身,就返回引用就OK了。
例1:
- const string manip2(const string& s){
- string ret = s;
- return ret;
- }
记住,C++函数返回引用,一定不能返回指向本地的变量的引用。否则,函数运行完毕,本地变量销毁,那这个引用是谁的别名呢?who knows,程序只有崩溃了。
C++函数如果返回引用,就要返回在这个函数之前就存在的变量的引用才行。
例2。C++函数返回本地变量的引用
- const string& manip1(const string& s){
- string ret = s;
- return ret; //never do this
- }
可以看出,例子1和例子2的区别是很微妙的,只有返回值类型不一样:string和string&。如果申明了string&,那么函数就直接返回了ret而不是ret的副本。当函数结束的时候,ret变量被销毁,如果主函数用到了这次函数的调用,程序立即崩溃。我刚才试了试,确实崩溃了。
哈哈,谁都不想看到上面的那个图吧。而且,在编译的时候,编译器也给出了警告:..\test.cpp:4:9: warning: reference to local variable 'ret' returned
这里是测试代码:
- # include <iostream>
- using namespace std;
- const string& manip1(const string& s){
- string ret = s;
- return ret;
- }
- const string manip2(const string& s){
- string ret = s;
- return ret;
- }
- int main(){
- string test("hello,world");
- string result1 = manip1(test);
- string result2 = manip2(test);
- cout << result1 << endl;
- cout << result2 << endl;
- }
我前面自己写两个complex的复数类实现点击查看。
在重载+运算符号的时候,我就是返回的引用:
- my_complex& my_complex::operator +(const my_complex& rhs) {
- real = rhs.real + real;
- imag = rhs.imag + imag;
- return *this;
- }
0 0
- 12.c++-返回引用的函数
- <<c++primer>>返回引用的函数调用
- 常量函数、常量引用参数、常量引用返回值[C++]
- 常量函数、常量引用参数、常量引用返回值[C++]
- c++:函数返回引用类型和非引用类型
- 函数返回值 返回引用
- c++ 函数返回引用
- c++函数返回引用
- 函数 返回引用
- c++ 函数返回引用
- C++函数返回引用
- c++ 函数返回引用
- c++ 函数返回引用
- C++函数返回引用
- c++函数返回引用
- 引用返回函数值
- C++函数返回引用
- 返回引用的函数
- 网络编程原始套接字(转)
- 日经春秋 20150131
- C语言动态内存分配
- 怪事天天见:char 转 字符串出事了
- php错误:You don't have permission to access / on this server.
- C++函数返回引用
- 关于atmel的sam9g45无法连接到sam ba以及手动烧写系统时的问题
- java实现短信猫发送短信
- v4l2使用技巧
- 判断移动设备是手机还是平板?
- C/C++ 运算符优先级列表
- Yii PDO方式执行SQL语句
- HDU--IMNU集训四:剪花布条 学到了一个重要的工具函数strstr()
- 你敢说你真的懂微信营销吗? 转载