C++中const用法总结

1. const修饰普通变量和指针

const修饰变量,一般有两种写法:

const TYPE value;

TYPE const value;

这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。

对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。

例如:

const int nValue;         //nValue是const

int const nValue;    // nValue是const

但是对于指针类型的TYPE,不同的写法会有不同情况,例如:

A. const char *pContent;

B. char * const pContent;

C. char const *pContent;

D. const char* const pContent;

对于前三种写法,我们可以换个方式,给其加上括号

A. const (char) *pContent;

B. (char*) const pContent;

C. (char) const *pContent;

这样就一目了然。根据对于const修饰非指针变量的规则,很明显,A=C.

- 对于A,C, const修饰的类型为char的变量*pContent为常量,因此,pContent的内容为常量不可变.

- 对于B, 其实还有一种写法: const (char*) pContent;

含义为:const修饰的类型为char*的变量pContent为常量,因此,pContent指针本身为常量不可变.

- 对于D, 其实是A和B的混合体,表示指针本身和指针内容两者皆为常量不可变

总结:

(1) 指针本身是常量不可变

(char*) const pContent;

const (char*) pContent;

(2) 指针所指向的内容是常量不可变

const (char) *pContent;

(char) const *pContent;

(3) 两者都不可变

const char* const pContent;

还有其中区别方法:

沿着*号划一条线,

如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;

如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

2. const修饰函数参数

const修饰函数参数是它最广泛的一种用途,它表示函数体中不能修改参数的值(包括参数本身的值或者参数其中包含的值)。它可以很好

void function(const int Var); //传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)

void function(const char* Var); //参数指针所指内容为常量不可变

void function(char* const Var); //参数指针本身为常量不可变(也无意义, 因为char* Var也是形参)

 

参数为引用,为了增加效率同时防止修改。

修饰引用参数时:

void function(const Class& Var);//引用参数在函数内不可以改变

void function(const TYPE& Var); //引用参数在函数内为常量不可变

 

3. const 修饰函数返回值

const修饰函数返回值其实用的并不是很多,它的含义和const修饰普通变量以及指针的含义基本相同。

(1) const int fun1() 这个其实无意义,因为参数返回本身就是赋值。

(2) const int * fun2() 

调用时 const int *pValue = fun2();

我们可以把fun2()看作成一个变量,那么就是我们上面所说的1.(1)的写法,即指针内容不可变。

(3) int* const fun3() 

调用时 int * const pValue = fun2();

我们可以把fun2()看作成一个变量,那么就是我们上面所说的1.(2)的写法,即指针本身不可变。

4. const修饰类对象/对象指针/对象引用

const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。

const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。

例如:

class AAA

{
   void func1();

void func2() const;

}

const AAA aObj;

aObj.func1(); ×

aObj.func2(); 正确

 

const AAA* aObj = new AAA();

aObj->func1(); ×

aObj->func2(); 正确

 

5. const修饰成员变量

const修饰类的成员函数,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。

class A

{

   …

   const int nValue;       //成员常量不能被修改

   …

   A(int x): nValue(x) {}; //只能在初始化列表中赋值

}

 

6. const修饰成员函数

const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。

 

class A

{

   …

void function()const; //常成员函数, 它不改变对象的成员变量. 也不能调用类中任何非const成员函数。

}

对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。

 

7. const常量与define宏定义的区别

(1) 编译器处理方式不同

define宏是在预处理阶段展开。

const常量是编译运行阶段使用。

(2) 类型和安全检查不同

define宏没有类型,不做任何类型检查,仅仅是展开。

const常量有具体的类型,在编译阶段会执行类型检查。

(3) 存储方式不同

define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

const常量会在内存中分配(可以是堆中也可以是栈中)。

C++中const用法总结,布布扣,bubuko.com

时间: 2024-10-14 04:13:38

C++中const用法总结的相关文章

【c++】C++中const用法总结

1.      const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误. 2.      const 修饰类的数据成员.                                                                const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的.因

c++中const用法大全

 1. const 修饰普通变量 const修饰一个变量,意思就是这个变量是一个常量,不能被改变 const int x;              //x是一个整形常量 const double x;        //x 是一个double型常量 const 修饰的是一个指针时: const int *x;          //x 是一个指向常量整形的指针 int *const x:        //x 是一个常量指针. const int *const x ;          /

C#中const用法详解

本文实例讲述了C#中const用法.分享给大家供大家参考.具体用法分析如下: const是一个c语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助.另外const在其他编程语言中也有出现,如c++.php5.c#.net.hc08 c const 一般修饰 的变量为只读变量 const定义应该为在定义的时候初始化 以后不能改变他的值 例: 代码如下: const

C++中const用法小结

const表示其所修饰的对象不可以被改变,例如常量,函数,指针等,下面总结一下常见的 几条const用法: 1 指针常量与常量指针:这两个概念很容易搞混淆,笔者每次用到这两个概念的时候都要重新查一下 文档才放心,查看定义与实例的时候,很容易理解二者的意义与区别,时间一长,概念又模糊了.这里 介绍一个简单的记法,这个方法<<Effective C++>>第三版中看到的:     常量指针,即指向常量的指针,故名思议,指针指向的对象是常量,可以改变指针本身的值,不可以 改变指针指向的对

c/c++中const用法总结

1.修饰常量时: const int temp1;  //temp1为常量,不可变 int const temp2;  //temp2为常量,不可变 2.修饰指针时: 主要看const在*的前后,在前则指针指向的内容为常量,在后则指针本身为常量: const int *ptr;   //*ptr为常量: int const *ptr;   //*ptr为常量: int* const ptr;   //ptr为常量: const int * const ptr;   //*ptr.ptr均为常量:

C++中const用法(3)——引用形参问题

c++函数的引用参数用法大概是这样的: void swap(int &a,int &b) { int temp = a; a = b; b = temp; } 一个简单的交换两个int型数的函数,当调用该函数时,比如 int i = 3; int j = 4; swap(i,j); 则得到的结果是i=4,j=3.因为引用参数实际上是实参的别名,对引用参数操作也就是对实参进行操作,就像传递指针一样.而如果用普通的int型参数则得不到这样的效果. 如果用const修饰形参,比如const in

C中const用法

const char*c;//如果const放在*的左边,表示const指向的内存空间不能写 char * const d=0xaa11;//如果const房子*的右边,表示const修饰d,d是指针变量,d是常量指针 const char *const e;//二者都有 const int a int const a 二者没有区别

C/C++中const的用法

const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结const的用法. 1.const位置 const位置较为灵活,一般来说,除了修饰一个类的成员函数外,const不会出现先一条语句的最后.示例如下: #include <iostream> using namespace std; int main(int argc,char* argv[]) {

C++中const 的各种用法

C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: const int size = 512; size = 0; // error: assignment of read-only variable 上面的例子中,定义size为常量并初始化为512,变量size仍是一个左值,但是现在这个左值是不可修改的,任何修改size的尝试都会导致编译错误. 因为常量在定以后就不能被修改,因此const对象定义时必须初始化,否则会引起编译错误,例如: