const 修饰成员函数体

经过const修饰的变量表示不能被修改这个容易理解,例如

  1. const int kInt = 0; // kInt 不能再被赋予其他值
  2. const int getValue(const char *key); // 返回值为不能被修改,函数体内不能修改参数的值

后来碰到一些写法如

  1. const int getValue(const char *key) const;

对于最后一个const不甚理解,查资料后才明白这个用于类的成员函数修饰函数体,表示该函数体内类的成员变量的值不能被改变

  1. class Test {
  2. public:
  3. void setValue(const int value) const {
  4. _value = value; // error C3490: ‘_value‘ cannot be modified because it is being accessed through a const object
  5. }
  6. private:
  7. int _value;
  8. };

而const修饰函数体也只能用于类的成员函数,如果用于普通函数

  1. void test() const {
  2. int k = 0; // error C2270: ‘test‘ : modifiers not allowed on nonmember functions
  3. }

const 是个好东西,有助于增强代码的健壮性,所以能用的地方都用上吧!

来自为知笔记(Wiz)

时间: 2024-10-03 20:51:36

const 修饰成员函数体的相关文章

const修饰函数参数 const修饰函数返回值 const修饰成员函数

看到const 关键字,C++程序员首先想到的可能是const 常量.这可不是良好的条件反射.如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮.const 更大的魅力是它可以修饰函数的参数.返回值,甚至函数的定义体. const 是constant 的缩写,"恒定不变"的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:"Use const whenever you need". 1

const修饰类的成员函数

<Effective C++>里面说,尽量使用const,const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当const修饰类的成员函数时,成员函数有什么特点. 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函

C++ 成员函数前和函数后加const修饰符区别

博客转载自: https://www.iteblog.com/archives/214.html 分析以下一段程序,阐述成员函数后缀const 和 成员函数前const 的作用 #include<iostream> using namespace std; class TestClass { public: size_t length() const; const char* getPContent(); void setLengthValid(bool isLengthValid); pri

C++ const修饰类成员的说明

#include <iostream>#include <string.h>#include <stdio.h>#include <stdlib.h>using namespace std;/* A1 const 修饰一个类中成员变量,则此变量必要用初始化列表来进行初始化. A2 const 修饰一个类中成员函数,则表示此成员函数不会修改类中所有成员变量. A3 const 修饰一个函数入参的引用时,表示此引用的内容不得在此函数中发生变化. A3.1 con

C++中 容易忽视的const 修饰符

C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误!(如类型不匹配问题) (2)编译器处理方式不同.define宏是在预处理阶段展开,const常量是编译运行阶段使用. (3)存储方式不同.define宏仅仅是展开,有很多地方使用,就展开多少次,不会分配内存.const常量会在内存

静态成员函数不能采用const修饰的原因

静态成员函数不能用const修饰 ,也不能存取nonstatic数据 C++中静态成员函数不能用const修饰的原因: static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数.这意味着一个静态成员函数只能访问它的参数.类的静态数据成员和全局变量. 不能用const的原因:一个静态成员函数访问的值是其参数.静态数据成员和全局变量,而这些数据都不是对象状态的一部分.而对成员函数中使用关键字const是表明:函数不会修改该函数访问的目标对象的数据成员.既然一个静态成员函

C++的const修饰

C++的const修饰 ?const的两个用途? (1)可以定义 const 常量  (2)const 可以修饰函数的参数.返回值. const的好处 (1)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患! (2)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性! (3)可以节省空间,避免不必要的内存分配(常量宏)! (4)提高了效率. 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为     一个编译期间的常量,没有了存储与读内存的操作

c++ const修饰指针

当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=&a; const修饰指针指向的变量,也就是说我们不能通过修改指针b 指向的值去修改a.即*b=100;这种操作是错误的. 这时候,指针b本身不是常量,*b是常量. 这种情况下,如果要修改*b返回的值,也就是修改指针b所指的对象可以用两种办法: · 改变b指向的变量a的值,a=100; ·让b指向别的变量,in

[Reprint]C++函数前和函数后加const修饰符区别

c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostream> 02   03 using namespace std; 04   05 // Ahthor:  过往记忆 06 // E-mail:  [email protected] 07 // Blog:    http://www.iteblog.com 08 // 转载请注明出处 09   10