首页 > 代码库 > C++ const限定符总结

C++ const限定符总结

1、const对象一旦被创建其值就不能再改变,所以一定要进行初始化。

2、const类型只能执行不改变其内容的操作,如参与计算、赋值等。

3、如果想在多个文件中共享const,可以在const的定义或声明处加上extern,虽然直接在头文件中定义,在其他文件中就可以看见,但是如果仅仅是在头文件中声明,在cpp实现中定义并初始化,其值是无法共享的。eg.
//  test.h
#ifndef __Test__test__
#define __Test__test__
#include<stdio.h>
externconstint value;
#endif/* defined(__Test__test__) */

//  test.cpp
#include"test.h"
int func() {
   
return100;
}
externconstint value =http://www.mamicode.com/func();

//  main.cpp
#include<iostream>
#include"test.h"
externconstint value;
int main(int argc, constchar * argv[]) {
    std::cout <<value << std::endl;
   return0;
}

4、常量引用并不存在,因为引用本身便无法更改引用对象,从这层意义上理解,所有引用都算是常量。我们一般所说的常量引用其实是对const的引用,形如
const int ci = 1024;
const int &cri = ci;

5、在初始化常量引用的时候允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可,即以下语句是合法的:
const int &r1 = 42;
const int &r2 = r1 * 2;

6、对const的引用允许引用一个并非const的对象,但是不能通过由此得到的引用,修改原值:
int i = 1024;
const int &cri = i;
i = 512; // 正确
cri = 512; // 错误

7、指针常量是指向常量的指针,常量指针是说指针本身是常量。常量指针必须被初始化。区分两者的方法是看*在const左边还是右边,在左边值为常量,在右边指针为常量。

8、const对象无法调用普通的成员函数
默认情况下一个类中的this的类型是指向类类型非常量版本的常量指针,= =有点绕,举个例子说就是:MyClass * const类型。尽管this是隐式的,但我们不能把它绑定到一个常量对象上,这就导致了我们不能在一个常量对象上调用普通的成员函数。
如果我们把this想办法变成const MyClass * const 是不是就可以解决问题呢,C++允许我们把const关键字加在成员函数的参数列表之后,也就是形如以下的样子,我们称作常量成员函数。
string to_string() const {
     return "haha";
}
常量成员函数不能改变它的对象内容,但是调用内部的数据成员是没问题的。常量对象,以及常量对象的引用或者指针都只能调用常量成员函数。
但是常量成员函数可以被普通的变量进行调用,比如string里的c_str()方法。

9、const函数除了可以调用常量成员函数之外,也可以调用静态成员函数(也许是因为静态函数并不会修改静态成员变量)。

C++ const限定符总结