c++ 3.4引用

1.定义

引用:已存在变量的别名。

主要用途:描述函数的参数和返回值。

语法格式:         数据类型  &  引用变量名    =    变量名;

  • 数据类型应与被引用变量的类型相同
  • &——引用运算符。这里是二元操作符。
  • 变量名为已定义的变量。

如:

int x ;

int & refx= x;

当定义一个引用变量之后系统并没有为它分配内存空间。refx 与x 具有相同的地址。即refx 与x使用的是同一内存空间

  • 引用与指针的对比:

 

2.引用与函数

1)引用作为形参

2)引用作为返回值

  • 函数返回值类型为引用型,在函数调用时,若接受返回值的是一个引用变量,相当于定义了一个对返回变量的引用;
  • 若接受返回值的是一个非引用变量,函数返回变量的值赋给接受变量。
  • 若函数返回值类型是引用型,则要求返回值为左值。这样函数调用式可以当做左值。

3.常引用

定义格式:   const  数据类型  &  引用变量  = 变量名;

  • 不能通过常引用更改引用变量的值

如:

int i(100);

const int & r = i;

不能通过r改变i的值;

但i可以改变i的值。

常引用作为形参时,函数体内不能通过形参改变实参的值。

如: void fun(const & x,int &y)

函数体不能改变x的值,但可改变y的值。

  • 注意:形参为常引用时实参可以是常量、变量表达式;若形参为非常引用类型时,实参需为左值。

如:对于 void fun(const int & x,int &y),调用fun(200,100)是错的,调用fun(200,a)是对的,(a为变量)。

### 如何在 Android 中集成和使用 FDBus C++ 库 要在 Android 项目中成功集成并使用 FDBus C++ 庥,可以按照以下方法实现: #### 配置环境 为了支持 Android NDK 的开发,在 Android Studio 中需要配置好 NDK 和 CMake 工具链。确保项目的 `local.properties` 文件中有如下设置: ```properties ndk.dir=/path/to/your/android-ndk ``` 同时确认 `CMakeLists.txt` 文件已正确配置。 --- #### 下载和编译 FDBus 库 如果尚未完成 FDBus 的本地编译,则可以通过 Git 克隆源码并执行跨平台编译流程来获取所需的静态或动态库文件[^2]。 克隆仓库命令如下: ```bash git clone https://gitee.com/jeremyczhen/fdbus.git cd fdbus mkdir -p build/install cd build cmake -DCMAKE_INSTALL_PREFIX=../install .. make install ``` 上述过程会生成目标机器架构下的 `.a` 或 `.so` 文件以及头文件目录。 对于 Android 平台而言,还需要额外指定工具链路径以便交叉编译为目标 ABI 架构(armeabi-v7a, arm64-v8a 等)。可以在运行 CMake 命令时加入 `-DCMAKE_TOOLCHAIN_FILE=<NDK_PATH>/build/cmake/android.toolchain.cmake` 参数,并通过选项控制具体的目标设备特性。 例如针对 ARMv8 (arm64-v8a),可尝试下面的指令集: ```bash cmake \ -DANDROID_ABI="arm64-v8a" \ -DANDROID_PLATFORM=android-21 \ -DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake \ -DCMAKE_INSTALL_PREFIX=../install-android-arm64 \ .. make install ``` 这一步完成后会在安装前缀下找到适合 Android 使用的二进制产物。 --- #### 将 FDBus 添加到 Android Project 接下来把预构建好的库引入至 Android Gradle 工程当中去。主要分为以下几个部分操作说明: ##### 修改模块级 `build.gradle` 编辑应用或者原生组件对应的 `build.gradle` 脚本,添加对外部依赖的支持声明。比如这样定义 native 层资源加载方式: ```gradle android { ... defaultConfig { externalNativeBuild { cmake { cppFlags "-std=c++11" arguments &#39;-DFDBUS_ROOT_DIR=&#39; + projectDir.getAbsolutePath() + &#39;/libs/fdbus&#39; } } } sourceSets { main { jniLibs.srcDirs = [&#39;src/main/libs&#39;] } } externalNativeBuild { cmake { path "CMakeLists.txt" } } } ``` 这里假设已经将之前生成的结果复制到了工程内的某个子文件夹里,如 `libs/fdbus/include`, `libs/fdbus/lib`. ##### 创建自定义 CMakeLists.txt 编写用于描述如何链接第三方库的新版 `CMakeLists.txt` 文档内容示例: ```cmake # 定义最小 API 版本号 set(CMAKE_MINIMUM_REQUIRED_VERSION 3.4) add_library(fdbus STATIC IMPORTED) set_target_properties(fdbus PROPERTIES IMPORTED_LOCATION ${FDBUS_ROOT_DIR}/lib/${ANDROID_ABI}/libfdb.a) include_directories(${FDBUS_ROOT_DIR}/include) add_executable(example example.cpp) target_link_libraries(example log android fdbus) ``` 注意替换 `${FDBUS_ROOT_DIR}` 变量的实际值为你实际存储的位置地址。 --- #### 测试调用功能 最后创建一个简单的 JNI 接口测试函数验证整个链条是否正常工作。以下是 Java 类绑定代码片段展示: ```java public class NativeInterface { static { System.loadLibrary("example"); } public native String invokeFdbFunction(); } ``` 对应 CPP 实现可能看起来像这样: ```cpp #include <jni.h> #include "fdbus/FDBus.h" extern "C" JNIEXPORT jstring JNICALL Java_com_example_NativeInterface_invokeFdbFunction(JNIEnv *env, jobject thiz) { auto bus = new fdbus::CFDBus; const char* result = bus->Initialize(); // 替代为真实业务逻辑 delete bus; return env->NewStringUTF(result); } ``` 以上即完成了基本框架搭建和技术要点阐述[^1]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值