首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++:23 再议const的用法(下)

其中,指向const 对象与指向nonconst对象,是不同的指针类型。...对象与指向对象的指针的规则类似于对象与引用。即,const 类型的对象不能直接被nonconst 类型的指针所指示(同2);可以使用const 类型的指针指向non-const 对象(同3)。...(同样在使用中不能修改)。 所以a 和b 是一样的,称为整型常数,在使用中不能被修改,当然都不能转为其他类型了。...,我面试C++的时候经常会问到面试者这样一个问题:类成员函数在后边通过const修饰和不用const修饰的区别是什么,我想你现在应该能回答上来了吧。...实际上通过const修饰的成员方法为常方法,常量成员函数确保不会修改任何非静态成员变量的值。编译器如果发现常量成员函数内出现了有可能修改非静态成员变量的语句,就会报错。

40320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    求求你,不要再纠结指针了(1) ——万能转化公式

    总而言之,地址的数值是一个无符号整数。知道这个有什么用呢?我们待一会再说。...任何指针常量,其本质首先是一个无符号整数。   请一定要记住(重要的事情说三遍): 变量的三要素中,仅有地址值有可能会占用物理存储空间。   ...推论:世界上并不存在指向指针的指针的指针的指针…… 给我一个整数,我自己造自己的变量。   指针的数值运算太坑?转换成整数,加减乘除,随便整。 4、小结 地址:所谓地址就是一个整形的数值(常数)。...地址不包含任何类型信息 指针:指针分为指针常量和指针变量,单独说指针的时候,通常指指针常量。...指针常量 = 整数常量 + 类型信息 也就是: 指针常量 = ( *)整数 常量 反过来也成立: 整数常数 = 指针常量 - 类型信息 也就是: 整数常数 = (unsigned int

    69920

    嵌入式软件工程师笔试面试指南-CC++

    上例中,p是一个数组指针,它指向一个包含有4个int类型数组的指针,刚开始p被初始化为指向数组b的首地址,++p相当于把p所指向的地址向后移动4个int所占用的空间,此时p指向数组{5,6,7,8},语句...是指针指向包含4个元素的一维数组的指针变量。...常量指针,指向常量的指针,指向常量的常量指针有什么区别?...指向常量的指针 const int *p 先看*再看const,定义一个指针指向一个常量,不能通过指针来修改这个指针指向的值 指向常量的常量指针 const int *const p 对于“指向常量的常量指针...面向对象与泛型编程是什么? 面向对象编程简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

    1.6K11

    iOS面试知识总结之功能区分

    那它和nil的区别在哪里呢?nil是把一对象完全释放,就是完全从内存中释放。但是当我想把一个对象置空但是又想要一个容器的时候,我们就可以使用NSNull。...如果遵循着两个协议就必须分别实现copyWithZone和mutableCopyZone方法 拷贝原则: 1.非容器类:像NSString、NSNumber这样的不能包含其他对象的系统类 不可变对象调用...可变对象调用copy和mutablecopy都是深拷贝,区别在于copy返回不可变对象,mutablecopy返回可变对象 容器类与非容器类的拷贝原则相似,但需要注意的是:所有的容器类的拷贝,拷贝后新容器里的元素始终是浅拷贝...只要狗的牵绳脱落,狗就会跑掉,不管有多少小孩在看着它。 总结:只要最后一个strong型指针不再指向对象,那么对象就会被释放,即使还有weak型指针指向它。...Base64常用来解决网络请求中特殊编码问题和轻量型的加密(转化为非明文)。 关于这两种技术是否为加密算法的讨论有很多,我是这样理解的: 严格意义上来说,这两种技术都不能算是真正的加密算法。

    87550

    指针*和引用&的区别使用

    栗子来一颗: int a; int &at = a; //上述声明允许将at和a互换,它们指向相同的值和内存单元,就像连体婴一样。 上面这个栗子其实很有内涵在里面 我为什么不写成下面这个形式呢?...//如果理解不了,这样理解:参数中的*和&只是走个过场,告诉人家那个参数是什么类型的 //调用函数时的参数是a,不是*a,也不是&a //所以&a传的这个a是一个int类型,而*a的这个a就是指针...通过传递引用而不是整个数据对象,可以提高程序的运行速度。 指针 1、指针和const 将const用于指针有一些很微妙的地方。 可以用两种不同的方式将const关键字用于指针。...当然,这里还有另外的应用场景: void test2(const JieGouTi1 *a,JieGouTi2 *b) { //将a中的某些值赋值给b } //这里有一个注意点,传进去赋值的结构体指针最好用...const. 4、函数指针 关于为什么要使用函数指针,我的理解还不是很深刻,毕竟功力不足。

    1.1K50

    C++知识概要

    构造函数为什么不能为虚函数 虚函数对应一个指向虚函数表的指针,但是这个指向vtable 的指针事实上是存储在对象的内存空间的。...在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等 数据段 储存已被初始化了的静态数据。数据段(data segment )通常是指用来存放程序中已初始化的全局变量的一块内存区域。...但需要特别注意的是 const_cast 不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的常量性,其去除常量性的对象必须为指针或引用。...this 指针调用成员变量时,堆栈会发生什么变化 当在类的非静态成员函数访问类的非静态成员时,编译器会自动将对象的地址传给作为隐含参数传递给函数,这个隐含参数就是 this 指针。...,一旦最后一个指向对象的 shared_ptr 被销毁,对象就会被释放,即使有 weak_ptr 指向对象,对象还是会被释放。

    1.1K20

    整理了70道C语言与C++常见问答题

    指针有自己的一块空间,而引用只是一个别名; 使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小; 作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引 用的修改都会改变引用所指向的对象...; 可以有const指针,但是没有const引用; 指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变; 指针可以有多级指针(**p),而引用止于一级; 指针和引用使用++运算符的意义不一样...常量指针 是指定义了一个指针,这个指针指向一个只读的对象,不能通过常量指针来改变这个对象的值。 指针常量强调的是指针的不可改变性,而常量指针强调的是指针对其所指对象的不可改变性。...常量指针是指定义了一个指针,这个指针指向一个只读的对象,不能通过常量指针来改变这个对象的值。 指针常量强调的是指针的不可改变性,而常量指针强调的是指针对其所指对象的不可改变性。...举个例子:一个父类类型的指针指向一个子类对象时候,使用父类的指针去调用子类中重写了的父类中的虚函数的时候,会调用子类重写过后的函数,在父类中声明为加了virtual关键字的函数,在子类中重写时候不需要加

    3.1K01

    『C++』我想学C++,C++太难了,那我想入门,给我10分钟我带你入门

    返回引用(我觉得特别重要) 函数声明为返回引用,则不需要对return语句中的表达式进行复制,而是返回对象本身。 函数返回引用仅是它所指向对象的一个别名。...指向const对象的指针 const type 指针 const int a=1; //const地址无法赋给非const指针所以应该定义一个指向const的指针 const int * b=&a;...//指向常量的指针,而非常指针。...int d=10; b=&d; //也可以将一个非const地址赋给 指向const的指针 但是不能通过该指针改变该变量的内容。...int member=10; poi=&member;//错误 指向const对象的const指针 /*const type const 指针(第一个const限定int表示指针指向的单元是常量,

    1.6K10

    C++基础语法重点总结

    ,有什么好处 引用一般使用在参数和返回值上面。...说一说宏的优缺点,有什么解决办法 宏的优点是增强代码的复用性,比如用宏来定义一个常量,那么在后续的代码中我或许需要多次用到这个常量。还有就是可以提高性能。...常量指针说的是指针的指向是一个常量,不可以通过指针去修改这个常量的值,但是指针可以改变指向。 指针常量说得是它是一个常量,它不可以改变指向,但是可以通过指针修改指向的内容。...a去修改内容,但是不可以改变指向 const char* a = "abc";//字符串常量,不可以修改内容和指向 sizeof关键字 sizeof关键字是一个运算符,用来计算数据类型大小,会包含'\...,作用是当一个变量被声明为volatile时,编译器会禁止将该变量的读取和写入操作放入寄存器中,确保每次读取和写入都直接访问内存。

    21230

    C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案

    答案: c++中的指针是一个很经典的用法,但是也是最容易出错的,比如定义了一个指针,必须对其进行初始化,不然这个指针指向的是一个未知的内存地址,后续对其操作的时候,会报错。...存放指针的数组:char *array[5];含义是一个数组中存放了5个指向字符型数据的指针。...按照题意,我理解为初始化一个存放指针的数组,char *array[2]={“China”,”Beijing”};其含义是初始化了一个有两个指向字符型数据的指针的数组,这两个指针分别指向字符串”China...2、关键字const是什么含意? 正确答案: 在标准C++中,这样定义的是一个常量,用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。...按照题意,我理解为初始化一个存放指针的数组,char *array[2]={“China”,”Beijing”};其含义是初始化了一个有两个指向字符型数据的指针的数组,这两个指针分别指向字符串”China

    2.8K20

    开发成长之路(3)-- C语言从入门到开发(讲明白指针和引用,链表很难吗?)

    栗子来一颗: int a; int &at = a; //上述声明允许将at和a互换,它们指向相同的值和内存单元,就像连体婴一样。 上面这个栗子其实很有内涵在里面 我为什么不写成下面这个形式呢?...//如果理解不了,这样理解:参数中的*和&只是走个过场,告诉人家那个参数是什么类型的 //调用函数时的参数是a,不是*a,也不是&a //所以&a传的这个a是一个int类型,而*a的这个a就是指针...通过传递引用而不是整个数据对象,可以提高程序的运行速度。 指针 指针和const 将const用于指针有一些很微妙的地方。 可以用两种不同的方式将const关键字用于指针。...函数指针 关于为什么要使用函数指针,我的理解还不是很深刻,毕竟功力不足。但是我知道那些回调函数都是用函数指针的,所以对函数指针必须要理解好。 这叫啥,“但行好事,莫问为啥”。...初识链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。

    59020

    c++基础之字符串、向量和数组

    我想看看被作者称之为数学语言,抽象程度目前最高的语言是什么样的,对我以后看问题有什么影响 迭代器提供了两种重要的抽象:提供统一的接口来遍历容器中所有元素;另外迭代器提供统一接口,让我们实际操作容器中的元素...使用迭代器 迭代器的使用如下: 迭代器都是使用begin 获取容器中的第一个元素;使用end获取尾元素的下一个元素 迭代器自身可以像操作对象的指针一样操作容器中的对象 迭代器比较时,比较的是两个迭代器指向的是否是同一个元素...,不支持 >、<比较 ++ 来使迭代器指向容器中下一个位置的对象,--来指向上一个位置的对象 如果不想通过迭代器改变容器中元素的值,可以使用const类型的迭代器,即 const_iterator 类型的迭代器...int&,这部分表示数组中元素类型是int&,也就是这里定义了一个包含10个指向int数据的引用的数组,由于不存在存储引用的数组,所以这里是错误的 Parry,由于有了括号,与[]结合最紧密的就变成了...int,也就是我们先定义了一个包含10个int类型的数组,而Parry本身是一个指针,所以这里定义的其实是一个指向存储了10个int类型数据的数组的指针 同样的方式分析,得到arrRef 其实是一个指向存储了

    1.1K20

    全网最硬核 JVM 内存解析 - 7.元空间存储的元数据

    堆中新建的对象的对象头中的 Klass 指针部分,指向元空间中 Klass,同时,Klass 中各种字段都是指针,实际对象的地址,可能在非类空间,例如实现方法多态以及 virtual call 的 vtable...中的内存形式),但是这个 Klass 对象中存储的很多数据都是指针,具体的数据存储属于非 Java 类数据,一般非 Java 类数据远比 Java 类数据占用空间大。...非 Java 类数据:即被 Klass 对象引用的一些数据,例如:类中的各种方法,注解,执行采集与统计信息等等。不要偷取他人的劳动成果,也不要浪费自己的时间和精力,让我们一起做一个有良知的写作者。...: 类元空间:存储上面说的Java 类数据的空间 数据元空间:存储上面说的非 Java 类数据的空间 基于是否开启了压缩类指针分为这两部分的原因是,(剽窃抄袭侵权 )在对象头需要保留指向 Klass...ConstanPoolCache:运行时常量池缓存,用于加速常量池访问 ConstMethod:类文件中的方法解析后,静态信息放入 ConstMethod,这部分信息可以理解为是不变的,例如字节码,行号

    1K40

    论 Java 中的内存分配

    pc程序计数器   optop操作数栈顶指针   frame当前执行环境指针   vars指向当前执行环境中第一个局部变量的指针   所有寄存器均为32位。   pc用于记录程序的执行。...optop,frame和vars用于记录指向Java栈区的指针。 二. 栈(Stack):  又称堆栈    位于一般的RAM中。处理器经由指针提供直接支持。   ...3.栈有一个很重要的特殊性,就是存在栈中的数据可以共享 四....它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。...比如一个类的名字,一个类字段的名字/所属类型,一个类方法的名字/返回类型/参数名与所属类型,一个常量,还有在程序中出现的大量的字面值。    常数值通常直接置于程序代码内部。

    1K70

    嵌入式面试高频考点整理(建议收藏)

    定义和声明的区别 声明是将一个名称引入程序,定义提供了一个实体在程序中的唯一描述。 什么是野指针 访问一个已销毁或者访问受限的内存区域的指针。...常量指针:又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。 引用作为函数参数以及返回值的好处[7] 在内存中不产生被返回值的副本。...之所以被称为顺序容器,是因为元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置(尾部、头部或中间某处)插入,元素就会位于什么位置。...非连续空间、通过指针来连接每一个小空间、插入和删除都是O(1)操作,元素访问效率较低等等,不支持随机访问。 关联容器 关联容器有以下四种:set、multiset、map、multimap。...C++中内存泄漏的几种情况[17] 在类的构造函数和析构函数中没有匹配的调用new和delete函数 没有正确地清除嵌套的对象指针 在释放对象数组时在delete中没有使用方括号 指向对象的指针数组不等同于对象数组

    75920

    STL:调用empty()而不是检查size()是否为0

    如果要判断一个容器是否为空,如何判断呢?...在日常开发中,出于个人习惯,并不会特别在意非要调用哪一种。 而《Effective STL》给出的建议是,调用empty()。 为什么呢?...因为不同容器的empty()实现,一定是耗费常数时间,而size()则不一定。 为此,我查看了我工作环境上的几个容器的empty()实现,分别如下(说明,g++ 7.5.0, c++14)。...vector底层是一块连续的内存,其迭代器本质上是指向这块内存首尾位置的两个指针。所以empty()函数是在检查这两个指针是否指向同一位置,若是,则说明容器为空,返回true。这当然是常数时间。...我没有再查看其他容器的实现,上述列出的容器几乎代表所有stl容器类型。尽管上述各个容器的empty()的实现和其容器底层密切相关,但总体都是耗费常数时间。

    1.3K20

    C++引用和指针以及const常量限定符,能说一二吗?

    ---- 引用(不能作为对象): 起一个另外的名字而已,好比如*文华今天叫小华,明天别人叫他小文,他还是他。 注意上述中的引用应该是指“小文”这个名字符号,而不是指小文其人,故引用不是对象!...指针(可作为对象): 指向一个对象的复合类型,好比如指向一个建筑的地址牌号。注意其本身也是一个对象。...指针与引用相比: 指针本身是一个对象,存放某个对象的地址,允许对指针赋值和拷贝,在其生命周期内可先后指向不同的对象; 指针无须定义时一定赋确定的值,可用nullptr,0,NULL(头文件cstdlib...p1作为指向常量的指针,仅限制其本身不能改变所指对象的值,并不限制所指向对象是否常量 例6 int a=24; int *const p=&a;//p将一直指向a,即p是常量指针!...顶层const和底层const: 指针作为一个对象,可指向另外一个对象,这两个对象是否常量是独立的。 顶层const:指针本身是const。更一般地,当任意一个对象是常量时,可称为顶层const。

    85820
    领券