学习第一天const

2023-11-05

 constant:

指针与const:

const char * a; //指向const对象的指针或者说指向常量的指针。
char const * a; //同上
char * const a; //指向类型对象的const指针。或者说常指针、const指针。
const char * const a; //指向const对象的const指针。

常指针修改非const对象:

#include<iostream>
using namespace std;
int main(){
    int num=0;
    int * const ptr=&num; //const指针必须初始化!且const指针的值不能修改
    int * t = &num;
    *t = 1;
    cout<<*ptr<<endl;
}

函数const:

int *const func2();函数指针本身不可变

函数参数引用:

对于非内部数据类型的参数而言,象void func(A a) 这样声明的函数注定效率比较低。因为函数体内将产生A 类型的临时对象用于复制参数a,而临时对象的构造、复制、析构过程都将消耗时间。

为了提高效率,可以将函数声明改为void func(A &a),因为“引用传递”仅借用一下参数的别名而已,不需要产生临时对象。但是函数void func(A &a) 存在一个缺点:

“引用传递”有可能改变参数a,这是我们不期望的。解决这个问题很容易,加const修饰即可,因此函数最终成为

void func(const A &a)。

以此类推,是否应将void func(int x) 改写为void func(const int &x),以便提高效率?完全没有必要,因为内部数据类型的参数不存在构造、析构的过程,而复制也非常快,“值传递”和“引用传递”的效率几乎相当。

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

学习第一天const 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s

随机推荐

  • SylixOS Unit Test介绍

    1 Unit Test工程介绍 在开发过程中 经常需要进行复杂的测试工作 部分测试工作需要生成多个可执行程序 普通类型的工程在测试时需要建立多个测试工程 这样会导致测试工作冗余繁杂 Unit Test 工程可以实现一个工程生成多个可执行程序
  • Android开发-CardView卡片View的详解,头条三面技术四面HR

    CardView一般用于需要显示阴影效果的UI 此外CardView还提供了圆角的功能 嘿嘿 这东西还能直接设置成圆形 可以简单的弄成圆形View CardView其实本身是使用FrameLayout 帧布局 所以它其实还是一个布局 引用
  • JavaScript冒泡排序与插入排序的原理

    冒泡排序 原理是临近的数字两两进行比较 按照从小到大或者从大到小的顺序进行交换 这样一趟过去后 最大或最小的数字被交换到了最后一位 图片示例 代码示例 var arr 5 8 3 4 5 9 1 4 5 9 6 3 8 for var i
  • anaconda 通过命令行执行 python 文件

    win10 中 anaconda 通过命令行执行 python 文件 点击三角按钮 在跳出的菜单栏中选择 Open Terminal 通过 python 文件名 py 执行
  • "res://ieframe.dll/dnserrordiagoff.htm"

    最近用vs2005做web应用程序的时候 遇到个奇怪的问题 有的时候点击某个链接 或者触发一个页面刷新的事件时 网页就会跳转成无法显示网页的状态 地址栏中的url是 res ieframe dll dnserrordiagoff htm 一
  • VMware vSphere Hypervisor 6 (ESXi) 免费许可证使用限制

    公司在虚拟化方面使用的是hyper v方案 但是windows的不稳定让人头疼 更新补丁和死机问题都需要定期重启 对于虚拟化平台简直就是灾难 最近在查看关于EXSi6的免费使用限制 没看到太多中文资料 在vmware论坛的Hyperviso
  • C# .net 使用RabbitMq讲解

    一 环境搭建 首先 由于RabbitMQ使用Erlang编写的 需要运行在Erlang运行时环境上 所以在安装RabbitMQ Server之前需要安装Erlang 运行时环境 可以到Erlang官网下载对应平台的安装文件 如果没有安装运行
  • 强引用、软引用、弱引用和虚引用的区别

    1 强引用 StrongReference 最普遍的一种引用方式 如String s abc 变量s就是字符串 abc 的强引用 只要强引用存在 则垃圾回收器就不会回收这个对象 2 软引用 SoftReference 用于描述还有用但非必须
  • ecshop漏洞修复整理

    1 ECShop存在一个盲注漏洞 问题存在于 api client api php文件中 提交特制的恶意POST请求可进行SQL注入攻击 可获得敏感信息或操作数据库 路径 api client includes lib api php 参照
  • ABAP常用系统变量 sy-

    直接在syst结构里面可以找到 abap系统变量 SY SUBRC 系统执行某指令后 表示执行成功与否的变量 0表示成功 SY DBLNT 被处理过的记录的笔数 SY UNAME 当前使用者登入SAP的USERNAME SY DATUM 当
  • Redis 基础总结

    1 NoSQL概述 1 1 数据库分类 目前数据库分 关系型数据库与非关系型数据库 常用的关系型数据库 Oracle MySQL SqlServer DB2 常用的非关系数据库 Redis MongoDB ElasticSearch Hba
  • python实现消消乐小游戏

    import random import time 游戏面板大小 BOARD SIZE 10 图案种类数 PATTERN COUNT 4 相邻图案个数 ADJACENT COUNT 3 游戏时间限制 秒 GAME TIME 60 得分表 S
  • 记录Vue3+ts+ElementPlus 多层级表头动态表格创建

    因为工作需要 需要一个如上图 不确定层级的 多层级表头的表格 搜索网上的方法 多为vue2 element ui的方法 查到的vue3 Element plus的方法仅为建立两层级表格 经借鉴大神方法并修改成功 供自己留存 大神略过 一 创
  • Unity3D开发之Matrix4x4矩阵变换

    在Unity开发中时常会用到Matrix4x4矩阵来变换场景中对象的位置 旋转和缩放 但是很多人都不太理解这儿Matrix4x4变换矩阵 通过DX中的变换矩阵我来讲一讲在unity中这个变换矩阵是怎么变换的 在三维图形程序中 我们可以用几何
  • 稀疏数组(最详解)

    概念 当一个数组中大部分元素为0 或者为同一值的数组时 可以使用稀疏数组来保存该数组 稀疏数组的处理方式是 记录数组一共有几行几列 有多少个不同值 把具有不同值的元素和行列及值记录在一个小规模的数组中 从而缩小程序的规模 如下图 左边是原始
  • 左手坐标系和右手坐标系

    转自 https blog csdn net xiaoluoshan article details 53384103 基本的数学知识 左手坐标系和右手坐标系 这些对于搞图像开发或者游戏开发的朋友来说 应该是很基础的东西 不过对于大部分人来
  • VB mschart控件的使用

    一 先看个小例子 Private Sub Form Load Dim MyData 20 1 As Double x轴坐标值 Y轴坐标值 MyData 0 0 0 MyData 0 1 180 本句代表了 第一点数据的X轴坐标为0 Y轴坐标
  • UCOS2的文件目录

    想着闲着也是闲着 把之前学习ucos2源码的笔记整理一下 复盘一次 总结内容将其写为博客作为学习的输出 一 为什么要学RTOS或者IOTOS 我在大一时 开始进入实验室接触单片机 摸爬滚打的参加了几次比赛 也因此入了嵌入式的坑 大三时开始思
  • 一位年薪40W的测试被开除,回怼的一番话,令人沉思

    一位年薪40W测试工程师被开除回怼道 反正我有技术 在哪不一样 一技傍身 万事不愁 当我们掌握了一技之长后 在职场上说话就硬气了许多 不用担心被炒 反过来还可以炒了老板 这一点在码农界特别明显 许多测试人在辞职时 都有一种心态 烂公司 烂领
  • 学习第一天const

    constant 指针与const const char a 指向const对象的指针或者说指向常量的指针 char const a 同上 char const a 指向类型对象的const指针 或者说常指针 const指针 const c