C++ return返回值的注意

在含有return语句的循环后没有提供reutrn 语句是很危险的,大部分的编译器不能检测出漏洞
bool str_subrange(const string &str1,consst string &str2){
  if(str1.size()==str2.size())
return str1==str2;
  string::size_type size={min(str1.size(),str2.size())};
  string::size_type i=0;
  while(i!=size){
    if(str1[i]!=str2[i])
return ; //error! no return value!
  }
}


1.主函数main()


在cstdlib头文件内定义了两个预处理变量 分别表示程序运行的成功和失败
#include<cstdlib>
int main(){
if(some_failure)
reutrn EXIT_FAILURE;
else
return EXIT_SUCCESS;
}


2.返回非引用类型
    函数的返回值用于初始化在调用函数出创建的临时对象。
    在求解表达式的时候程序会创建一个没有命名的对象,这就是临时对象。
string make_plural(size_t str,const string &word>const string &ending){
   return (ctr==1)?word:word+ending;
}
函数要么返回word的副本 要不返回临时string对象 它是由word和ending的相加而产生的


3.返回引用
  当函数返回引用类型时,没有复制返回值 而是返回对象本身 
const string &shorterString(const string &s1,const string &s2){
  return s1.size()<s2.size()?s1:s2;
}


4.千万不要返回局部对象引用
const string&manip(const string& s){
    string ret=s;
    return ret;
}
这个函数会在运行时出错,因为他返回了局部对象的引用。
*当函数执行完毕 字符串ret占用的空间会被释放 函数返回值指向了对于这个程序来说不再有效的内存空间
与此同时 千万不要返回指向局部变量的指针 同理!



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值