首页 > 编程语言 >Android C++系列:函数返回值注意事项

Android C++系列:函数返回值注意事项

时间:2024-07-20 20:54:31浏览次数:13  
标签:返回 return 函数 C++ 编译器 引用 返回值 Android size

1. 背景

函数返回值就是使用return语句终止正在执行的函数,看是很简单的问题有什么说的呢?因为越是简单的问题里面越是有一些不易发现的坑。

比如在循环中使用return语句:

bool findChar(const string &str, const char c){
    auto size = str.size();
    for(decltype(size) i = 0; i < size; i++){
        if(str[i] == c){
            return true;
        }
    }
}

看是有return语句,但是只有循环中满足特定条件才能正常返回,如果找不到的话实际上是没有返回值。编译器可能能检测出这个错误,也可能检测不出来,要看编译器的实现,好在大部分情况编译器甚至IDE可以帮我们检测出来,但是如果不幸我们用了检测不出来的编译器,可能会在运行时发生未定义行为错误。

2. 理解值是如何被返回的

类似于形参被初始化,函数返回一个值也是类似于变量初始化。最终是返回的值初始化调用点的一个临时量,这个临时量就是函数调用的结果。

如果函数返回的是局部变量,则返回值将被拷贝到调用点。

如果函数返回的是引用,因为引用只是它所引对象的别名,则不会将所引用的值拷贝到调用点。

那么问题来了,如果返回的引用引用了局部变量会发生什么?

答案是会发生错误,因为返回了未定义的值。

因为在方法体内,函数执行完成意味着局部变量存储的空间会被释放,局部变量的引用指向了非法内存区域

标签:返回,return,函数,C++,编译器,引用,返回值,Android,size
From: https://blog.csdn.net/sjw890821sjw/article/details/140577297

相关文章

  • 【C++BFS 回溯】756. 金字塔转换矩阵
    本文涉及知识点C++BFS算法C++回溯LeetCode756.金字塔转换矩阵你正在把积木堆成金字塔。每个块都有一个颜色,用一个字母表示。每一行的块比它下面的行少一个块,并且居中。为了使金字塔美观,只有特定的三角形图案是允许的。一个三角形的图案由两个块和叠在上面的单......
  • GESP C++ 二级真题(2023年12月)T1 小杨做题
    问题描述:为了准备考试,小杨每天都要做题。第一天做了a道题;第二天做了b道题;从第三天起,小杨每天做的题目数量是前两天的总和。此外,小杨还规定当自己某一天做了大于或等于m题时,接下来的日子,他就不做题了。请问到了第n天,小杨总共做了多少道题?输入描述:总共4行。第一行一个整数a,......
  • 使用GDAL(C++库)从末尾行开始向上读取图像数据
    使用GDAL(C++库)从末尾行读取图像数据OpenCV等图像库默认的读取方式都是从第一行开始,逐行读取数据(自顶向下),填充到内存缓冲区;对于某些特殊应用,需要反行序读取(从末尾行读到起始行)的图像数据结果。GDAL提供了灵活的栅格数据读取方式RasterIO,下面介绍RasterIO的调用方式,以及如何......
  • 在VS2022中通过Nuget将vcpkg环境集成/卸载到c++项目
    在VS2022中通过Nuget将vcpkg环境集成/卸载到c++项目vcpkg是微软和C++社区维护的免费开源C/C++包管理器。利用它,可以一条命令编译安装用户所需的库;提供CMake配置文件;并且对于Windows开发者,在VisualStudio中集成后还可以自动链接静态库,非常方便易用。一般而言,开发者仅需要......
  • Android开发 - xmlns命名空间中tools详解
    xmlns:tools是什么命名空间tools可以告诉AndroidStudio,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。比如我们要让android:text属性只在布局预览中有效。tools可以覆盖android的所有标准属性,将android:换成tools:即可。同时在运行的时候就连tools:本身都是被忽略......
  • C++的输入输出(ACM模式)
    原文1.输入首先,在C++语言中,要使用标准的输入,需要包含头文件<iostream>1.1cincin是c++中标准的输入流对象,cin有两个用法,单独读入和批量读入cin的原理:简单来讲,有一个缓冲区,键盘输入的数据会先存到缓冲区,用cin可以从缓冲区中读取数据。注意:cin可以连续从键盘读入数据cin......
  • Android开发 - 布局文件之 include 使用
    简介include是在一个布局中,导入另一个布局文件。优势是:相同的页面只需写一次,提高了共通布局的复用性。下面我们以标题栏为例,详细说明它的使用步骤使用步骤第一步:通用布局-创建title_bar.xml//title_bar<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:an......
  • 如何编写一个C++程序来整蛊你的好基友
    如何编写一个C++程序来整蛊你的好基友如何编写一个C++程序来整蛊你的好基友整蛊按照危险性来排序3星类1.每行输出一句2.一直输出,不换行3.给控制台换一个颜色(较有威慑力)颜色代码4.扫盘(配上第三个效果更好,可以用来装B)4星类(含部分解药)弹窗类弹窗代码按下反馈键判定另......
  • c++里数的存储
    hello,大家好啊,这里是文宇,不是文字,是文宇哦。C++中的数的存储方式涵盖了整数、浮点数、字符等多种类型。每种类型的数有不同的位数和存储规则。下面将详细介绍C++中数的存储。首先,整数类型的存储通常使用二进制来表示。C++中提供了多种整数类型,包括char、short、int、longlon......
  • C++生化危机2.0.yl.3已更新
    本版本修复了一个BUG,邻居家无法进入已修复一些小BUG也修复完成(作者体验游戏时发现的)下载链接:生化危机2.0.yl.3.rar-蓝奏云代码如下(建议下载,因为rar解压包内内容更全):#include<bits/stdc++.h>#include<windows.h>#include<time.h>#include<conio.h>usingnamespacestd......