C++中return语句的用法
2017-03-12 17:07
246 查看
return语句用于结束当前正在执行的函数,并将控制权返回给调用此函数的函数。
return语句有两种形式:
return;
return expression;
1、没有返回值的函数
不带返回值的return语句只能用于返回类型为void的函数,return语句是为了引起函数的强制结束,这种用法类似于循环结构中的break语句的作用。
返回类型为void的函数通常不能使用第二种形式的return语句,便是,它可以返回另一个返回类型同样是void的函数的调用结果:
2、具有返回值的函数
任何返回类型不是void的函数都必须返回一个值,而且这个返回值的类型必须和函数的返回类型相同,或者能隐式转化为函数的返回类型。
主函数main的返回值
任何返回类型不是void的函数都必须返回一个值,但此规则的一个例外情况:允许main没有返回值就可结束。如果程序控制执行到主函数main的最后一个语句都还没有返回,那么编译器会隐式地插入返回0的语句。
关于main返回的另一个特别之处在于如何处理它的返回值。可将main返回值视为状态指示器。返回0表示程序运行成功,其他大部分返回值则失败。非0返回值的意义因机器不同而不同,为使返回值独立于机器,头文件
返回非引用类型
函数的返回值用于初始化在调用函数处创建的临时对象。求解表达式时,如果需要一个地方储存其运算结果,编译器会创建一个没有命名的对象,这就是临时对象。
用函数返回值初始化临时对象与用实参初始化形参的方法是一样的。如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。当函数返回非引用类型时,其返回值既可以是局部对象,也可以是求解表达式的结果。
返回引用类型
当函数返回引用类型时,没有复制返回值。相反,返回的是对象本身。例如,考虑下面的函数,此函数返回两个string类型形参中较短的那个字符串的引用:
千万不要返回局部对象的引用
当函数执行完毕时,将释放分配给局部对象的存储空间。此时,对局部对象的引用就会指向不确定的内存。
千万不要返回指向局部对象的指针
一旦函数结束,局部对象被释放,返回的指针就变成了指向不再存在的对象的悬垂指针
引用返回左值
返回引用的函数返回一个左值,因此,这样的函数可用于任何要求使用左值的地方:
return语句有两种形式:
return;
return expression;
1、没有返回值的函数
不带返回值的return语句只能用于返回类型为void的函数,return语句是为了引起函数的强制结束,这种用法类似于循环结构中的break语句的作用。
void swap(int &v1,int &v2) { if(v1==v2) return; int temp=v2; v2=v1; v1=tmp; }
返回类型为void的函数通常不能使用第二种形式的return语句,便是,它可以返回另一个返回类型同样是void的函数的调用结果:
void do_swap(int &v1,int &v2) { int temp=v2; v2=v1; v1=tmp; } void swap(int &v1,int &v2) { if(v1==v2) return false; return do_swap(v1,v2) }
2、具有返回值的函数
任何返回类型不是void的函数都必须返回一个值,而且这个返回值的类型必须和函数的返回类型相同,或者能隐式转化为函数的返回类型。
主函数main的返回值
任何返回类型不是void的函数都必须返回一个值,但此规则的一个例外情况:允许main没有返回值就可结束。如果程序控制执行到主函数main的最后一个语句都还没有返回,那么编译器会隐式地插入返回0的语句。
关于main返回的另一个特别之处在于如何处理它的返回值。可将main返回值视为状态指示器。返回0表示程序运行成功,其他大部分返回值则失败。非0返回值的意义因机器不同而不同,为使返回值独立于机器,头文件
#define EXIT_SUCCESS 0 #define EXIT_FAILURE 1
返回非引用类型
函数的返回值用于初始化在调用函数处创建的临时对象。求解表达式时,如果需要一个地方储存其运算结果,编译器会创建一个没有命名的对象,这就是临时对象。
用函数返回值初始化临时对象与用实参初始化形参的方法是一样的。如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。当函数返回非引用类型时,其返回值既可以是局部对象,也可以是求解表达式的结果。
返回引用类型
当函数返回引用类型时,没有复制返回值。相反,返回的是对象本身。例如,考虑下面的函数,此函数返回两个string类型形参中较短的那个字符串的引用:
const string &shorterstring(const string &S1, const string &S2) { return S1.size() < S2.size()? S1:S2; }
形参和返回类型都是指向const string对象的引用,调用函数和返回结果时,都没有复制这些string对象。
千万不要返回局部对象的引用
当函数执行完毕时,将释放分配给局部对象的存储空间。此时,对局部对象的引用就会指向不确定的内存。
const string &manip(const string &S) { string result = S; return result; }
这个函数会在运行时出错,因为它返回了局部对象的引用。当函数执行完毕,字符串result占用的存储空间被释放,函数返回值指向了对于程序来说不再有效的内存空间。
千万不要返回指向局部对象的指针
一旦函数结束,局部对象被释放,返回的指针就变成了指向不再存在的对象的悬垂指针
引用返回左值
返回引用的函数返回一个左值,因此,这样的函数可用于任何要求使用左值的地方:
char &get_val(string &str,string::size_type ix) { return str[ix]; } int main() { string s("a value"); cout<<s<<endl;//输出:a value get_val(s,0) = 'A'; cout<<s<<endl;//输出:A value return 0; }
如果不希望引用返回值被修改,返回值应该声明为const:
const char &get_val(string &str,string::size_type ix)
相关文章推荐
- C++中return语句的用法
- C++中return语句的用法
- C++中if语句后跟return时的用法
- C++中return语句的用法
- C/C++中exit和return的用法(备记)
- C++中关于return的用法总结
- PHP return语句另类用法不止是在函数中
- C++7.3 return 语句----返回引用、非引用类型
- 循环语句中的break、continue、return用法
- 总结Java中return语句的用法
- 详解C++中赋值和输入输出语句的用法
- java和c++的区别之return语句
- JAVA心得分享---return语句的用法
- Python中return语句用法实例分析
- javascript中break,continue和return语句用法小结
- C++ 初学者指南 第五篇(4)使用return语句
- c++中关于return的用法总结
- c++中关于return的用法总结
- C语言中,if语句后面加return 的用法的疑问
- C语言函数的出口:return语句(高质量c/c++编程指南)