C/C++——const用法完整总结

一直以来都没有总结const修饰符的用法,总是感觉const的用法太多,要记住的情况太多,不能够掌握所有的情况,所以总是不了了之。但是如果没有彻底掌握const用法的话,心里总是感觉知识还欠缺很多,还要很多知识点没有掌握。如果自己真正的总结完之后,其实也只有这么多用法。

const修饰数据成员,成员函数,类对象。

  • const修饰数据成员

修饰数据变量,保证数据变量只能在定义的时候进行初始化,并且在程序的执行过程中不能被再次赋值。

1、修饰类中的数据成员变量,可以直接在声明的时候进行初始化(const int num = 100;),不过最好还是在构造函数的初始化列表中进行初始化(必须用初始化列表进行初始化)。

class A
{
public:
         A(int val):num(val){ }
private:
         const int num;//const成员变量
};

2、也可以在程序中定义const变量。const int num = 100;//比如在定义全局const变量num=100;

3、const int num = 100;等价于int const num = 100;

也就是说const int 和int const意思相同。

  • const修饰成员函数

1、const修饰成员函数的返回类型

class A
{
public:
         A(int val):num(val){ }
         const void fun(int val){
             cout << "num = " << num << endl;
             age = val;
         }
private:
         const int num;//const成员变量
         int age;
};

此时const的位置有下面两种等价的情况:

const void
fun
();

void const
fun
();

2、const修饰成员函数的形参变量

此时const的位置有下面两种等价的情况:

void fun(const int val);

void fun(int const val);

3、const直接修饰成员函数

const放在函数声明之后,函数实现之前。void fun(int val)const;

const此时保证不会修改该对象的数据成员。

下面的例子是错误的,因为fun是const成员函数,它不能修改对象的成员变量age;

void fun(int val)const{
     cout << "num = " << num << endl;
     age = val;//此时是错误的。
}

(1):const成员函数此时能访问const和非const数据成员。但不能修改非const数据成员。

(2):const成员函数中只能调用其它const的成员函数。

(3):void fun(int val)const;和void fun(int val);两个函数构成重载函数。

const对象只能调用const成员函数。

非const对象会优先调用非const成员函数,但是如果fun函数只有const函数,那么非const对象也会调用const成员函数。(但是该非const成员函数中不能修改对象成员变量)

  • const修饰类对象

定义一个const对象a:const A a(100);

const修饰函数,是从函数的层面,不修改数据。

const修饰类对象,是从对象的层面,不修改数据,只能调用const成员函数。

const对象只能调用const成员函数。

非const对象会优先调用非const成员函数,但是如果fun函数只有const函数,那么非const对象也会调用const成员函数。(但是该非const成员函数中不能修改对象成员变量)

时间: 2024-08-11 03:24:20

C/C++——const用法完整总结的相关文章

C++ Primer 学习笔记_25_类与数据抽象(11)--const 用法小结、static与const以及static const(const static)

一.const 用法总结 1.可以对const 的用法做个小总结: const int n = 100;  //定义常量 const Test t(10); const int & ref = n;   //const引用 int& ref = n;  //Error [const与指针] const int* p; //const出现在*前面,表示*p是常量 (*p = 200; //Error) int * const p2;  //const出现在*后面,表示p2是常量 (p2 =

C++中const用法总结

1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的.对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变.例如:const int nValue:         //nValue是constint const nValue:    // nValue是const但是对于指针类型的TYPE,

#define static const 用法 (转)

1.Define用法: define主要是用于宏常量定义的,使程序看起来更简洁明了,方便代码维护,#define定义的实质只是一个常数的名字,没有具体数据类型的,没有分配内存空间.在编译是会被编译器替换为该常数.每次使用该宏定义,就要进行编译并分配空间,若一个程序中多次使用define定义的数据,则就会有多份拷贝.这么做是为了提高程序的可读性,但安全性相对差点. 2.const用法: const定义的全局数据变量,其基本作用和define相同,但又在define的基础上增加了好多功能.const

【转】话说C语言const用法

原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修饰局部变量.例:void func(){const int a=0;} 首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量,我们给它赋予初始值0. 然后再看const. const作为一个类型限定词,和int有相同的地位.const int a;int const a;是

const用法-read only

const用法详解 const 只读(read only) 示例一:只读的int型变量 int main(int argc,const char * argv[]){     const int a1;     int const a2;      //    a1 = 2; //    a2 = 3;     printf("%d\n",a1);     printf("%d\n",a2);    } 上面这个例子,在声明int类型的变量a1和a2时,用const

const 用法详解

const用法详解 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j;   //非法,导致编译错误 j=i;   //合法 2. 必须初始化 const int i=5;    //合法 const int j;      //非法,导致编译错误 3. 在另一连接文件中引用co

C++中的const用法(2)

前面写过一篇博客介绍const用法:C++中的const用法 今天发现有个忙点,特此补充. 我们知道,一般const修饰指针时有三种情况. <span style="font-size:18px;">const int *p;</span> 这表示p指向一个int型的const变量,但是指针本身并不是const. int a = 0; int *const p = &a; 这种情况表示指针是const,一旦初始化不能指向另外的数据. int a = 0;

const用法归纳总结 C++

非常好的一篇分析const的总结归纳, 在此谢谢原作者:http://blog.csdn.net/zcf1002797280/article/details/7816977 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址.在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针.既不能改变 this所指向的对象,也不能改变 this所保存的地址. 关键字:Const

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

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