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

没有()的const访问器,或者对成员变量的const引用

没有()的const访问器是指在C++中,对于一个类的成员函数,如果在函数声明的末尾加上const关键字,表示该函数是一个const成员函数,即在函数内部不会修改类的成员变量。

const成员函数有以下特点:

  1. 不修改类的成员变量:const成员函数内部不能修改类的非静态成员变量,包括普通成员变量和指针成员变量指向的对象。
  2. 只能调用const成员函数:const成员函数内部只能调用其他const成员函数,因为const成员函数保证了在函数内部不会修改类的状态。
  3. 不能修改this指针:const成员函数内部不能修改this指针的值,即不能将this指针赋值给其他指针变量。

const成员函数的作用:

  1. 提供只读访问:const成员函数可以提供对类的只读访问,不会对类的状态产生影响,可以在多线程环境下安全地访问对象。
  2. 重载函数:通过在成员函数后面加上const关键字,可以实现对同名函数的重载,一个是const成员函数,一个是非const成员函数。

const引用是指在C++中,使用const修饰的引用类型。const引用有以下特点:

  1. 只读访问:const引用只能用于读取数据,不能修改引用的值。
  2. 常量引用:const引用可以绑定到常量对象、临时对象和非常量对象,但不能通过const引用修改对象的值。
  3. 避免拷贝:使用const引用作为函数参数,可以避免不必要的拷贝操作,提高性能。

const访问器和const引用的应用场景:

  1. 类的成员函数:在类的成员函数中,如果不需要修改类的成员变量,可以将成员函数声明为const成员函数,以提供只读访问。
  2. 函数参数:在函数参数中,如果不需要修改参数的值,可以使用const引用作为函数参数,避免不必要的拷贝操作。
  3. 返回值类型:在函数返回值类型中,如果返回的是一个临时对象或者常量对象,可以使用const引用作为返回值类型,避免不必要的拷贝操作。

腾讯云相关产品和产品介绍链接地址:

  1. 腾讯云云服务器(CVM):提供弹性计算能力,满足各种业务需求。详情请参考:https://cloud.tencent.com/product/cvm
  2. 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务,适用于图片、音视频、文档等数据的存储和管理。详情请参考:https://cloud.tencent.com/product/cos
  3. 腾讯云数据库(TencentDB):提供多种数据库产品,包括关系型数据库、NoSQL数据库和数据仓库等,满足不同业务场景的需求。详情请参考:https://cloud.tencent.com/product/cdb
  4. 腾讯云人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等,帮助开发者构建智能化应用。详情请参考:https://cloud.tencent.com/product/ai
  5. 腾讯云物联网(IoT):提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等,帮助实现设备互联互通。详情请参考:https://cloud.tencent.com/product/iot
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++中const成员变量成员函数

const成员变量 const 成员变量用法和普通 const 变量用法相似,只需要在声明时加上 const 关键字。...const成员函数(常成员函数) const 成员函数可以使用类中所有成员变量,但是不能修改它们值,这种措施主要还是为了保护数据而设置const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量函数名字通常以get开头,后跟成员变量名字,所以通常将它们称为 get 函数。...() const{ return m_score; } getname()、getage()、getscore() 三个函数功能都很简单,仅仅是为了获取成员变量值,没有任何修改成员变量企图...函数头部结尾加上 const 表示常成员函数,这种函数只能读取成员变量值,而不能修改成员变量值,例如char * getname() const

26930

const修饰符使用(修饰结构体指针,引用外部const 变量

const修饰符使用 //const修饰变量为只读 const int a = 10; a = 20;//是错误赋值 //指针变量 指针指向内存 两个不同概念 char buf[] =..."helloworld"; //从左往右看,跳过类型,看修饰那个字符 //如果是*,说明指针指向内存不能改变 //如果是指针变量,说明指针指向不能改变,指针值不能修改 const char *p...是指针指向内存空间内容进行封锁。 const封锁是指针变量,不能修改其指向,但是可以修改指针指向内存当中内容。...const修饰结构体指针 //结构体进行封锁 typedef struct { int a; int b; }my_struct; void fun1(my_struct *p)...p) { //结构体指针指向不可以修改 //结构体指针指向内存当中内容也不可以修改 } 如何引用其他.c文件中const变量 extern const int a;//注意,不能再进行赋值

54310
  • 临时变量作为非const引用进行参数传递引发编译错误

    其中文意思为临时变量无法为非const引用初始化。也就是在参数传递过程中,出现错误。...当这个临时对象传递给非conststring&引用类型时,因为非const引用绑定对象时,要求该对象也是非const对象。而在这时,因为string类型临时对象是const对象,所以就出现错误。...---- 2.所有的临时对象都是const对象吗 为什么临时对象作为引用参数传递时,必须是常量引用呢?很多人对此解释是临时对象是常量,不允许赋值改动,所以作为非常量引用传递时,编译就会报错。...IntClass(6)表示生成一个无名临时对象,传递给非const引用,在print函数中通过引用修改了这个临时对象。这说明了并非所有的临时对象都是const对象。...这里贴上摘自网上一句话:“内置类型产生临时变量具有常性,而自定义类型产生临时变量不具有常性”,我想这句话能解释你所谓临时变量为什么能作为左值原因。”

    2.6K31

    【C++】构造函数初始化列表 ③ ( 构造函数 初始化列表 中 为 const 成员变量初始化 )

    初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 初始化列表 中 为 const 成员变量初始化 1、初始化 const 常量成员 如果 类 中定义了 被 const 修饰 成员变量...: 这里区分 初始化 与 赋值 , 初始化 是 变量 声明时 同时 为其 设置一个 初始化值 ; 赋值 是 变量 声明以后 , 再变量进行赋值 ; const 成员变量 是常量 , 是 无法在声明后...进行赋值 , 因此 这里 必须在 构造函数 初始化列表中 const 成员变量 进行赋值 ; 2、错误代码示例 - 没有初始化常量成员 在下面的 类 B 中 , 定义了常量 const int...m_const_int; 没有该常量 进行初始化 操作 , 在编译运行时 , 就会报错 ; class B { public: B() : m_age(10), m_a(10, 150) {}...没有 常量成员 进行初始化 , 就会报错 ; 代码示例 : class B { public: B() : m_age(10), m_a(10, 150), m_const_int(888) {}

    22130

    const详解

    基本概念 const名叫常量限定符,用来限定特定变量,以通知编译变量是不可修改。习惯性使用const,可以避免在函数中某些不应修改变量造成可能改动。...const成员函数可以访问所有成员变量,但是只能访问const成员函数。 非const成员函数,可以访问任何成员,包括const成员成员函数。...const成员函数不能修改任何成员变量,除非变量用mutable修饰。 使用const好处 可定义常量 防止意外修改造成错误 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型。...编译可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到错误。 为函数重载提供了一个参考 const修饰函数可以看作是同名函数重载。...所以我们在平时使用参数时候,对于没有修改需求变量或者参数 应该用const保护。

    40530

    Java内部类详解

    同样,匿名内部类也是不能有访问修饰符和static修饰符。   匿名内部类是唯一一种没有构造类。正因为其没有构造,所以匿名内部类使用范围非常有限,大部分匿名内部类用于接口回调。...静态内部类是不需要依赖于外部类,这点和类静态成员属性有点类似,并且它不能使用外部类非static成员变量或者方法,这点很好理解,因为在没有外部类对象情况下,可以创建静态内部类对象,如果允许访问外部类非...从这里也间接说明了成员内部类是依赖于外部类,如果没有创建外部类对象,则无法Outter this&0引用进行初始化赋值,也就无法创建成员内部类对象了。   ...我们看到匿名内部类Test$1构造含有两个参数,一个是指向外部类对象引用,一个是int型变量,很显然,这里是将变量test方法中形参a以参数形式传进来匿名内部类中拷贝(变量a拷贝)进行赋值初始化...为了解决这个问题,java编译就限定必须将变量a限制为final变量,不允许变量a进行更改(对于引用类型变量,是不允许指向新对象),这样数据不一致性问题就得以解决了。

    44310

    C++面试知识总结

    1.2 内存溢出原因 栈溢出:越界访问造成,例如局部变量数组越界访问或者函数内局部变量使用过多,超出了操作系统为该进程分配大小,还有递归函数层次过多超过了栈大小。...2.14 野指针,未初始化指针和空指针区别 野指针:指向一个已删除对象或无意义地址指针。 原因:指针变量没有被初始化,或者指针p被free或者delete之后,没有置为NULL。  ...2.18 static全局变量与普通全局变量区别 全局变量在整个工程文件内都有效。 静态全局变量只在定义它文件内有效。 全局变量和静态变量如果没有手工初始化,则由编译初始化为0。...static成员函数在类外部定义。 Static成员函数没有this形参。 可以直接访问所属类static成员,不能直接使用非static成员。...在类中static成员变量属于整个类所拥有,所有对象只有一份拷贝。 在类中static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问static成员变量

    1.7K41

    C++关键知识点梳理

    bufSize,需在使用cc文件中声明external const int budSize;const &:C++中const引用经常用于函数参数或者函数返回值,用于不被修改对象使用安全性,例如...宏类似于函数,但是其()中参数不是真的函数参数,在编译进行宏展开时()里参数进行"一一"替换。...默认构造函数没有参数,在没有定义任何构造函数情况下,编译会帮我们自动定义默认构造函数,否则我们定义了其他构造函数后,一定要显示定义默认构造函数;析构函数拷贝构造函数赋值构造函数访问控制和封装:this...)手动分配和释放;栈(stack):编译自动分配释放;全局区/静态区:全局变量和静态变量存储是放在一块,初始化全局变量和静态变量在一块区域,未初始化全局变量和未初始化静态变量在相邻另一块区域...oop封装C++中封装通过访问权限实现,类将客观事物抽象成数据成员和方法,并通过public,protected,private三种访问权限控制其他对象访问和继承。

    97030

    C++打怪升级(六)- 类和对象入门3

    前文我们并没有构造函数进行进一步探讨,即类对象创建时类成员变量具体是在构造函数哪里初始化?...成员变量错误举例: const成员变量正确举例: 引用成员变量错误举例: 引用成员变量正确举例: 类中有自定义类型成员,且该类没有默认构造函数 因为在创建类对象时先调用构造函数...: 1.初始化列表进行 定义初始化 2.构造函数体内初始化列表已定义变量初始化,或者说赋值更好 每个类成员变量默认(隐式)都会经过初始化列表, 我们也可以显式在初始化列表中写,...,然后类类型引用变量a3再引用这个临时变量; 并且由于临时对象具有常性const,多以类类型引用变量需要用const修饰; ---- 编译创建类对象时隐式类型转换可能优化 编译是对连续步骤中优化..._b << endl; return 0; } ---- 静态成员函数调用 静态成员也是类成员,受public、protected、private 访问限定符限制 静态成员函数没有隐藏

    61520

    CC++常见面试知识点总结附面试真题—-20220326更新

    或者左值就是在程序中能够寻址东西,右值就是一个具体真实或者对象,没法取到它地址东西(不完全准确),因此没法右值进行赋值,但是右值并非是不可修改,比如自己定义class, 可以通过它成员函数来修改右值...3. const 有什么用途 主要有三点: 1).定义只读变量或者常量(只读变量和常量区别参考下面一条); 2).修饰函数参数和函数返回值; 3).修饰函数定义体,这里函数为类成员函数,被...const修饰成员函数代表不能修改成员变量值,因此const成员函数只能调用const成员函数, 可以访问const成员,但是不能修改; 4).只读对象。...静态成员变量在类外单独分配存储空间,位于全局数据区,因此静态成员变量生命周期不依赖于类某个对象,而是所有类对象共享静态成员变量; 3). 可以通过对象名直接访问公有静态成员变量; 4)....静态成员函数可以访问静态成员变量,但是不能直接访问普通成员变量(需要通过对象来访问);需要注意是普通成员函数既可以访问普通成员变量,也可以访问静态成员变量; 3).

    1.5K10

    【C++ 初阶路】--- 类和对象(末)

    (初始化只能初始化一次) 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时) class A { public:...int& _ref; // 引用 const int _n; // const }; 有一些变量(引用const)必须要在定义时初始化,对于一个类来说,在对象实列化时就整体定义了,那么哪里是每个成员定义地方呢...此处用2构造了一个类C临时对象,然后再拷贝构造cc2。即:用一个整形变量给C类型对象赋值,实际编译背后会用2构造一个无名对象,最后用无名对象给cc2象进行拷贝构造。...,不属于某个具体对象,存放在静态区; 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明; 类静态成员即可用 类名::静态成员 或者 对象.静态成员访问; 静态成员函数没有隐藏..._day; return _cout; } 说明: 友元函数可访问私有和保护成员,但不是类成员函数; 友元函数不能用const修饰(因为const修饰是隐藏this,而友元函数没有隐藏

    7510

    C++ const各种用法总结

    const 对象默认为文件局部变量。要使const变量能够在其他文件中访问,必须显式地指定它为extern。...例如: const int i = 128; const int &r = i;(或者 int const &r = i;) const 引用就是指向const 对象引用。...返回引用const int &func2(); // 注意千万不要返回局部对象引用,否则会报运行时错误:因为一旦函数结束,局部对象被释放,函数返回值指向了一个程序来说不再有效内存空间。..., [1]必须在构造函数里面进行初始化; [2]只能通过初始化成员列表来初始化; [3]试图在构造函数体内const成员变量进行初始化会引起编译错误。...编译通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间常量,没有了存储与读内存操作,使得它效率也很高。

    2K10

    类和对象:运算符重载

    当你尝试将赋值运算符重载为全局函数时,会出现问题,原因如下: 成员访问权限:作为全局函数,赋值运算符将无法访问非公共(private或protected)成员变量。...在成员函数内部,this 指针允许你访问对象成员变量和其它成员函数。全局函数没有 this 指针,因此无法访问特定对象状态。 自赋值保护:成员函数版本赋值运算符可以检查自赋值,即对象赋值给自己。...这个默认赋值运算符会进行成员成员简单赋值,也就是逐个复制每个非引用、非指针成员变量值。...如果类中包含了其他自定义类型作为其成员变量,并且这些自定义类型重载了赋值运算符 =,那么在进行类实例赋值操作时,编译会尝试调用这些成员变量类型赋值运算符来完成赋值(MyQueue)。...: ①要修改对象成员变量函数不能加; ②只要成员函数内部不修改成员变量,就都应该加const,这样const对象和普通对象都可以调用。

    10910

    const那些事

    给src加上const修饰后,如果函数体内语句试图改动src内容,编译将指出错误。这就是加了const作用之一。 (3)参数为引用,为了增加效率同时防止修改。...如果在编写const成员函数时,不慎修改 数据成员或者调用了其它非const成员函数,编译将指出错误,这无疑会提高程序健壮性。使用const关 字进行说明成员函数,称为常成员函数。...只有常成员函数才有资格操作常量或常对象,没有使用const关键字 明成员函数不能用来操作常对象。...const对象可以访问任意成员函数,包括const成员函数....也就是说const对象只能访问const成员函数。 而add方法又调用了const修饰take方法,证明了非const对象可以访问任意成员函数,包括const成员函数。

    63530

    C++笔试面试题整理

    失败转换将返回空指针(当指针进行类型转换时)或者抛出异常(当引用进行类型转换时)。...const修饰类成员函数(函数定义体):任何不需要修改数据成员函数都应该使用const修饰,这样即使不小心修改了数据成员或调用了非const成员函数,编译也会报错。...4.引用没有 const,指针有 const; 5.引用不能为空,指针可以为空; 6....谈谈你指针理解? 指针是一个变量,该变量专门存放内存地址; 指针变量类型取决于其指向数据类型,在所指数据类型前加* 指针变量特点是它可以访问所指向内存。...当一个类A中没有生命任何成员变量成员函数,这时sizeof(A)值是多少,请解释一下编译为什么没有让它为零。 为1。

    2.6K40

    类和对象(完结)

    如果你没有给缺省值,对于没有显⽰在初始化列表初始化内置类型成员是否初始化取决于编译,C++并没有规定。...等价于int d=13;int &h=d;int &b=h; 3const成员变量 const也如上图,但是与引用不同我们可以之间在初始化链表定义。...没有默认构造类,引⽤和const之所以只能在初始化链表定义原因是他们必须有初始值,如果没有初始值,编译会报错 3于在类中成员变量初始化总结 (1)我们要先看是否有初始化链表,如果有的话就按初始化链表初始化...• 引⽤成员变量const成员变量没有默认构造类类型变量,必须放在初始化列表位置进⾏初始 化,否则会编译报错。...• ⾮静态成员函数,可以访问任意静态成员变量和静态成员函数。 • 突破类域就可以访问静态成员,可以通过类名::静态成员 或者 对象.静态成员访问静态成员变量 和静态成员函数。

    9310

    从反编译深入理解JAVA内部类类结构以及final关键字

    也就是说编译会默认为成员内部类添加了一个指向外部类对象引用,那么这个引用是如何赋初值呢?...,编译还是会默认添加一个参数,该参数类型为指向外部类对象一个引用,所以成员内部类中Outter this&0 指针便指向了外部类对象,因此可以在成员内部类中随意访问外部类成员。...从这里也间接说明了成员内部类是依赖于外部类,如果没有创建外部类对象,则无法Outter this&0引用进行初始化赋值,也就无法创建成员内部类对象了。...所以,如果在外部类没有引用时候,而成员内部类有人引用,外部类因为被内部类引用所以不会被回收。这就是Android中常见Activity内存泄露产生原因。    ...为了解决这个问题,java编译就限定必须将变量a限制为final变量,不允许变量a进行更改(对于引用类型变量,是不允许指向新对象),这样数据不一致性问题就得以解决了。

    59000

    与C++类和对象宿命(下)

    这个对于日期类是没有区别的 括号里面放我们要初始化大小,或者给上一个表达式也是可以 但是存在一些特殊情况只能用初始化列表进行初始化操作 存在三类: 1.没有默认构造类类型成员变量 就是像我们两个栈实现队列一样...2.const成员变量,只能在初始化列表里面进行初始化操作 3.引用成员变量 • 每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化地⽅。...成员变量只能进行初始化一次 • 引⽤成员变量const成员变量没有默认构造类类型成员变量,必须放在初始化列表位置进⾏初始化,否则会编译报错。...因为引用成员变量的话我们在定义时候就必须进行初始化操作 const变量是不能修改,只有一次修改机会,就是在定义时候 没有默认构造的话,我们要调用的话就必须进行传参操作 初始化有需要进行传参,...• ⾮静态成员函数,可以访问任意静态成员变量和静态成员函数。 • 突破类域就可以访问静态成员,可以通过类名::静态成员 或者 对象.静态成员访问静态成员变量和静态成员函数。

    19810

    C++复习大全(各种知识点)

    );     }; }  我们需要搞清楚一个问题是,引用既然是变量别名,那就必须有一个变量存在,这个时候,如果我们函数没有定义变量而直接就用引用,那么这个引用一定是存在问题。...寄存变量  寄存变量也是一个局部变量,关键字是 register ,它告诉编译要尽快访问这个变量,但是这个动作通常是编译,现在许多编译会对经常访问变量直接放在寄存中,我们如果强制这样声明并没有什么好处...- 一般信息隐藏就是把类所有数据成员声明为private 或者protected,并提供相应get 和set来访问对象数据。...需要了解是,不同C++编译class数据成员成员函数和全局函数等命名方案是不同,这是造成不同编译之间存在二进制连接兼容性主要原因之一  C++如何处理静态成员  在C++中,凡是使用...静态成员最大特点是没有this指针,因此可以通过作用域解析运算符直接引用

    1.1K20

    《C++Primer》第十三章 拷贝控制

    对于一个删除了析构函数类型,编译将不允许定义该类型变量或创建该类来临时对象 如果一个类有某个成员类型删除了析构函数,我们也不能定义该类变量或者临时对象 对于删除了析构函数类型,我们虽然不能定义这种类型变量或者成员...,但是可以鼎泰分配这种类型对象,但是不能释放这些对象 6.3 合成拷贝控制成员可能是删除 对于有些类来说,编译生成合成拷贝控制成员可能被定义为删除函数: 如果类某个成员析构函数是删除或者不可访问...(比如private),那么合成析构函数被定义为删除 如果类某个成员拷贝构造函数是删除或者不可访问或者某个成员析构函数是删除或者不可访问,则类合成拷贝构造函数也被定义为删除 如果类某个成员拷贝赋值运算符是删除或者不可访问...,或是类有一个const引用成员,则类合成拷贝构造函数被定义为删除 如果类某个成员析构函数是删除或不可访问,或是类有一个引用成员,他没有类内初始化,或是类有一个const成员,他没有类内初始化且未显式定义默认构造函数...只有但那个一个类没有定义任何自己版本拷贝控制成员,并且它所有非static数据成员都可以移动时,编译才会为它合成移动构造函数或者移动赋值运算符。

    1.6K40
    领券