const 不兼容的类型限定符问题

今天遇到一个问题,const对象调用成员函数的时候提示“不兼容的类型限定符”问题,查了一些资料,解决办法:

在成员函数后面加上 const关键字,例如:

int get() const { return x; }

更进一步的原因是:const限定的对象以及其引用只能调用const限定的成员函数

const限定代表变量的值不会发生改变,要想不改变变量的值则只能调用const修饰的成员函数。

之前没有注意,mark一下。

时间: 2024-10-20 18:24:02

const 不兼容的类型限定符问题的相关文章

类型限定符volatile

volatile bool flag; volatile int a; 添加volatile限定符的变量会获得几个特性: 1.强制内存读取 因为这个数据是"易变的(volatile)",所以要时刻关注,不能偷懒 场景: 把内存中的变量拷贝到寄存器中进行处理以加快速度: 存在的问题: 是对变量的拷贝进行处理,而变量本体如果发生变化可能也不会察觉 解决: 加上volatile限定符后,每次处理都会直接从内存读取,所以可以感知变量的变化. 但是: 寄存器走了,缓存来了,但问题没那么严重 多核

DSP平台优化实例:如果可以尽量加上const、restrict等类型修饰词

如果一个函数被频繁地调用很多很多次的时候,我们就应该从细节入手.有时候我们对代码本身的逻辑无从下手,往往这些细节能够带给我们意想不到的结果.类型修饰符就是其中之一. const关键词无需多说,但是我们往往也能忽视,所以尽量养成一个习惯:在设计一个函数参数或者申明一个变量(无论是局部的还是全局的)的时候,下意识地考虑一下这个变量我们可不可以设计为不可更改的. NOTE: 如果是指针的话,我们还应该考虑是指针指向的内容不可更改(应该申明为const int *p),还是指针本身不可修改(应该申明为i

C++ Primer 学习笔记_15_从C到C++(1)--bool类型、const限定符、const与#define、结构体内存对齐

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 一.bool类型(C语言没有) 1.逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节. 2.声明方式:bool result; result=true; 3.可以当作整数用(true一般为1,false为0) 4.把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false 5.示例 #include <iostream> using namespace

ERROR C3848:具有类型&quot;const XXX&quot; 的表达式会丢失一些 const-volatile 限定符以调用&quot;YYY&quot; with&quot;ZZZ&quot;

今天看书,Thinking in c++ volume 2 "Adaptable function objects" 里面作者说: Suppose, for example, that we want to make the function object gt_n, definedearlier in this chapter, adaptable. All we need to do is the following: class gt_n : public unary_funct

const限定符用法汇总

const限定符限定变量的类型是一个常量,对象一旦创建后其值就无法改变,所以const对象必须初始化. 初始化 const int i = get_size(); //运行时初始化 const int j = 42; //编译时初始化 int k = 40; const int ck = k; //k的值 被拷贝给了ck const对象的作用域 默认情况下,const对象仅在文件内有效. 如果要在多个文件中共享const对象,必须在变量的定义之前添加extern关键字. //file_1.cc定

C++中const限定符的应用

const限定符用于限定变量或对象的值.const对象一旦创建其值不能再改变.在C++中,const与引用和指针相结合,有多种用法.下面将结合<C++ Primer>第五版的内容做一个较详细的介绍. 1.const对象初始化 const对象必须初始化,初始化可以是任意复杂的表达式,如: const int i=get_size(); const int j=42; 2.文件间共享const对象 当以编译时初始化的方式定义一个const对象时,编译器将在编译过程中把用到该变量的地方都替换成对应的

(继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~

C++ const限定符

const限定符:利用const对对象加以限定,使得const对象一旦创建后其值就不能再改变. const对象在定义时就必须对其进行初始化,有两种方式: const int x = 10: const int x = getValue(); 第一种是直接给对象赋值一个常量或常量表达式,以这种方式初始化的,编译器会在编译阶段对所有的对象进行替换,如:把程序中所有出现x的地方都替换为10. 第二种方式是在运行时初始化,通过函数getValue()的返回值来初始化x. 默认情况下,const对象只在文

C++中的常量(一) const限定符

最近在重新看<<C++ Primer>>,第一遍的时候const和constexpr看得并不太懂,这次又有了些更新的理解,当然可能仍然有许多不对的地方... 首先,const限定符即"常量",一旦使用了const,那么对象的值不能再改变,比如: const int i=1; 同时,const修饰的变量必须初始化,因为如果不初始化,那么就永远无法初始化了. 常量的初始化并不一定需要用常量,字面值或者是普通对象都是可以的,例如: int i=5; const int