C++的const修饰

C++的const修饰

?const的两个用途?

(1)可以定义 const 常量 
(2)const 可以修饰函数的参数、返回值.


const的好处

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

const应用在变量?

1.const T* p;

const用来修饰指针所指向的变量,即指针指向为常量

int b=11;
int a=56;
const int* p=&b;
p = 6;   //error!
p = &a;  //ok!

2.T const* p;

const就是修饰指针本身,即指针本身是常量

int b = 55;
int a = 67;
int const* p=&b;
*p = 61;   // ok!
p = &a;    // error!

3.T* const p;

指针本身是常量,而指针所指向的内容不是常量,不能对指针本身做操作!

int a = 32;
int b = 11;
int* const p=&b;
*p = 43;   //ok!
p = a;    //error!

4.const T* const p;

指针和指向的变量都是常量,即不能对指针操作,也不能改变变量的值

int b = 0;
int a = 1;
const int* const p=&b;
p = 11;       //error!
p = a;        //error!

可以将将一个非常量指针转换为一个指向常量指针,相反为非法!


const应用在函数

1.函数参数使用const引用

作用:不能对传递进来的引用对象进行改变

a& operator=(const a& _a);

2.函数参数使用const指针

作用:不能对传递进来的指针内容进行改变

void fun1(const a* _a);

3.在类成员函数使用const修饰

作用:不允许对数据成员进行修改!

class AAA{
    int a = 55;
public:
    void fun2()const{
        a+=3;    // error!
    }
};

4.函数返回值用const修饰

const a fun3();

上面函数返回值指向的内容是常数,不可被修改,此返回值仅能赋值给const修饰的相同类型。

C++的const修饰,布布扣,bubuko.com

时间: 2024-12-22 09:39:01

C++的const修饰的相关文章

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

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

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

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

const修饰的常量 不能被直接修改 但是可以通过指针进行间接修改

大家都知道如下代码中,被const限定的a是不可以被直接修改的 void main() { const int a = 3; a=1; } 在C++中const修饰的常量,不能被直接修改,但是可以通过指针进行间接修改 来看下面的例子:           原意是想通过指针修改const常量a的值,但是运行后发现输出的a依然是3,a的值表面上并没有被改变. 但是查看内存窗口,发现a已经被改变,这里是编译器优化导致的,遇见a时编译器直接从寄存器中读取3给a,而不从内存中读取! 为了改善这种状况,我们

const修饰符简述

1.const限定符的使用 1)定义const常量:const可以将一个对象变成常量,不可被修改(只读类型),在定义时必须进行初始化.例如: const double mathPI = 3.141592653; 2)修饰函数的参数.返回值等.被const修饰的东西将不再改变: 3)若在整个程序中使用其他文件的变量: //若变量为非const //file_1.cpp int months = 10; //file_2.cpp extern int months; //const修饰的变量 //f

static extern const修饰符

const const修饰的东西不能被修改(由左至右解读-->顺时针螺旋法则) 指针类型根据位置的不同可以理解成3种情况: 1.常量指针 NSString * const pt1; //常量指针,指向一个字符串 //pt1初始化之后不能赋值,指向的对象值可以修改. //定义字符串常量 //NSString* const [email protected]"123"; @"123"存储在文字常量区,相同的字符串只存储一份 NSString* [email pro

函数重载不仅仅是看其参数,还要看是否有const修饰

比如QString有两个函数,可以堂而皇之的存在,原因就在于有了const修饰以后,编译器不把两个函数当作同一个函数名了: QChar * data() const QChar * data() const

const修饰类的成员函数

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

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

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

用const修饰指针

其实很简单,无奈老是记不住,那就单独写出来吧! a.指针本身不可变,即不可指向其他对象: char* const pContent = “abcde”; pContent[2] = ‘f’;     //合法 pContent = “abfde”;    //不合法 b.指针所指向的对象不可变,即指针不可以修改所指向的对象 const char *pContent = “abcde”; //或者 char const *pContent = “abcde”;     //上下两种情况相同 pCo