qt写C++(引用的妙处,内联函数)

2023-11-01

首先看什么是引用:
引用和取地址很像,容易混淆。单独出现&a就是对a这个变量取地址,如果是int &a,就是声明这是一个引用。

//引用

#include <iostream>

using namespace std;


int main()
{
    //基础知识

    int a = 1234; //ref alias 参数别名
    int &ra = a;  //引用(没有定义,是一种声明)int *p = &a;
    //规则:
    //1.声明的时候必须初始化,一经声明不能更改
    //2.&符号前有数据类型,是引用,其他都是地址


    cout << "a=" << a << endl;
    cout << "ra=" << ra << endl;

    cout << sizeof(a) << endl; //都是4个字节
    cout << sizeof(ra) << endl;

    cout << &a <<endl; //地址都是一样的
    cout << &ra <<endl;

    //*****************************************************





    return 0;
}

在这里插入图片描述

好了,现在我们来看引用的妙处:
这里甚至还用了函数重载。看注释:

//正式开始 引用
//引用的精髓在于传参
//引用的本质就是对指针的包装(引用的本质是指针)
//C++对裸露的内存地址(指针)作了一次包装
#include <iostream>

using namespace std;

void Swap(int *a,int *b)//用指针传递参数:开辟两个指针空间实现交换
{
    int t;
    t = *a;
    *a = *b;
    *b = t;

}

void Swap(int &c,int &d) //这里的c和d是引用,代表只是声明关系,不需要开辟新的空间
{
    int t;
    t = c;
    c = d;
    d = t;

}


int main()
{


    int a = 3; int b = 4;
    cout << a << b << endl;
    Swap(&a,&b); //传的是指针(或者说地址,所以会把地址暴露在外面)
    cout << a << b << endl;
//********************************************************

    int c = 5; int d = 6;
    cout << c << d << endl;
    Swap(c,d); //传的是引用
    cout << c << d << endl;

    return 0;
}

在这里插入图片描述

来看一下内联函数的优缺点


//内联函数的优缺点

#include <iostream>
#include <stdio.h>

using namespace std;

#define SQR(X) ((X)*(X))//宏函数
//优点:内嵌到目标代码,减少了函数的调用
//缺点:在预处理阶段完成了替换,有可能出现语意上的差错

//int sqr(int x)
//{
//    return x*x;
//}
//普通函数 缺点:无法避免压栈和出栈的开销

inline int sqr(int x)
{
    return x*x;
}
//内联函数,集中了宏函数和普通函数的优点
//内嵌到目标代码,减少了函数的调用,避免压栈和出栈的开销
//缺点:频繁调用增加了代码的空间,适合代码量小的函数体(5-10行)
int main()
{
    int i,j = 0;
    while(i<5)
    {
        printf("%d\n",SQR(i++));   //结果是错误的

    }
    printf("...........................\n");
    while(j<5)
    {

        printf("%d\n",sqr(j++));

    }
    return 0;
}


在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt写C++(引用的妙处,内联函数) 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • ubuntu vim 不能正常显示中文的解决方法

    ubuntu vim 不能正常显示中文 vi etc vim vimrc 在最后加入 set fileencodings utf 8 gb2312 gbk gb18030 set termencoding utf 8 set encodin
  • Android实战篇 阅读并同意“用户协议”与“隐私政策” 【Kotiln / Java】

    一 前言 SpannableStringBuilder 1 SpannableStringBuilder和SpannableString的区别类似与StringBuilder String 2 SpannableStringBuilder可
  • Qt 添加动态库.so文件的正确方法

    1 选中项目 右键 选中 Add Library 完成后 内容自动更新到Pro文件 我原来认为是手写的 qt添加动态库 so文件的正确方法 qt so CSDN博客
  • 软件测试—学习路线

    1 入门期 手工测试 利用测试用例去检验程序是否正确输出结果 通俗来说就是在编写程序结束后自己会运行几个例子来检查程序是否正确运行 而这样的行为就是手工测试 不过企业上手工测试的测试用例会比较刁钻 容易发现自动化测试发现不了的问题 不过这种
  • 用Openssl建立私有CA并颁发证书

    1 建立CA根证书 1 1生成私钥 openssl req newkey rsa 1024 sha1 config myopenssl cnf keyout rootkey pem out rootreq pem days 3650 1 2
  • 联想笔记本Ubuntu14.04 无法连接无线网络,WiFi已通过硬件开关禁用

    最近给一台联想笔记本装Ubuntu14 04系统 开机后屏幕右上角没有WiFi信息出现 倒是有个灰体的 WiFi已通过硬件开关禁用 看到这我的内心奔腾而过一群草原动物 开机就关WiFi 不能连WiFi的笔记本还能搞啥 莫着急 慢慢来 看这字
  • HDFS常见的问题和处理方法积累

    Hadoop常见问题与解决办法 问题1 reduce预处理阶段shuffle时获取已完成的map的输出失败次数超过上限 问题描述 问题剖析 解决方案 问题2 Too many fetch failures 问题描述 问题剖析 解决方案 问题
  • 解决el-select下拉框有值但是无法选中的问题

    问题描述 在某次开发项目时 发现el select组件无法选中数据了 下拉框中数据可以正常展示 数据是通过接口获取的 解决方案 在 el select 中加一个 change 的事件刷新一下 代码如下
  • top命令的使用和查看某个进程占用的系统内存大小

    一 top指令查看CPU状态和内存使用状态 1 查看CPU占用率 CPU 上次更新到现在的CPU时间占用百分比 2 查看内存占用率 MEM 进程使用的物理内存百分比 3 RES 进程使用的 未被换出的物理内存大小 单位kb RES CODE
  • go通过数组(切片)构建菜单树结构

    有这样的一组节点 每个节点包含自己的Id 还有父Id Parent Id 包含children指针数组 但是children是空 需要根据id和parentId把cihldren填充上 实现了如下的方法 type TreeNode inte
  • JAVA TCP客户端和服务器端简单实例

    客户端 package com example demo import java io BufferedReader import java io InputStreamReader import java io PrintWriter i
  • 详解Java中的byte类型(补充内容)

    写在前面 大家有时候可能会对Java中出现的byte类型有些疑惑 今天就来内化这些知识点 这个算是对其他博客的一个补充 内容很少 byte 在Java中 byte占据一个字节 也就是8的bite位 public static void ma
  • Kaiwii

    http blog csdn net kaiwii article details 7478038
  • qt 16进制字符串 转换为 二进制 字节流

    代码 include
  • 找出10个被打乱的数中被拿出的一个数

    include
  • RuoYi-弹出新窗口选择数据回显到父页面

    这里只贴出关键代码 其他代码需要自行编写 返回值处理根据实际需求来 目前是只取第一条 因为选择页面是单选行 表单页面新加方法 选择社区 function selectCommunity var url ctx community selec
  • 深度

    解码区块链 专题文章三 区块链的安全基础架构及构想 近期 国家发改委明确 区块链 被纳入新基建定义和范围 作为一项能够打通各个技术及领域的基础技术 区块链被认为将在各行业深度融合 新领域拓展 新场景新应用开发等方面潜力无限 解码区块链 内容
  • js 小技巧 ( 根据不同的状态生成不同的颜色和状态 )

    HTML 解决办法 动态绑定 color 然后 根据 三元表达式 进行处理 js 解决办法 动态绑定 color 然后 根据在每个数据的后面添加color属性 可能有的人会问vueb不能用不然不会双向绑定 确实vue要使用vueset 但是
  • 他人工作多年后的总结

    1 找一个好公司 精通至少一门语言及其框架 专注做5到10年 先有深度再有广度 不要为了高工资过早转向管理角色 2 从长远来看 拥有个人项目 阅读 写博客和参加访谈都会有助于你成为一个更好的开发人员 3 成为开发者社区的一部分 努力参加线上
  • qt写C++(引用的妙处,内联函数)

    首先看什么是引用 引用和取地址很像 容易混淆 单独出现 a就是对a这个变量取地址 如果是int a 就是声明这是一个引用 引用 include