const用法详解

1.基本概念

常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。

2.const修饰基本数据类型
2.1const修改一般常量及数组
int const a = 100;
const int a = 100; //同上

int const arr[3] = {1, 2, 3};
const int arr[3] = {1, 2, 3}; //同上
2.2const修饰指针
char *p = "hello";     // 非const指针,
                       // 非const数据

const char *p = "hello";  // 非const指针,
                          // const数据

char * const p = "hello";   // const指针,
                            // 非const数据

const char * const p = "hello";  // const指针,
                                 // const数据
2.2.1常量指针
int a = 5;
const int *p =&a;
*p = 20;   //error  不可以通过修改所指向的变量的值

int b =20;
p = &b; //right  指针可以指向别的变量
2.2.2指向常量的指针
int a = 5;
int *const p = &a;
*p = 20;     //right 可以修改所指向变量的值

int b = 10;
p = &b;      //error 不可以指向别的变量
2.2.3总结

 const位于*左侧,则指针所指的变量为常量,指针所指的对象不可修改;

const位于*右侧,则指针为常量指针,指针不可指向别的地方。

3.const修饰函数
3.1const修饰函数参数
3.1.1参数为指针

起保护作用

void StringCopy(char* strDest, const char* strSource);

 实参中,指针会指向一段内存地址,调用函数之后,函数会产生一个临时指针变量,这个变量的地址与实参的地址不一样,但是这两个指针指向的内存是同一块。形参加上const 修饰之后,保护了这一块内存地址不被修改,如果刻意修改这一块内存,编译器会报错。

3.1.2参数为引用

起保护作用

void func(const int &x);
3.2const修饰函数返回值
3.2.1值传递

如果是值传递(比如返回值是int类型的),没有必要用const修饰。

int func();
const int func(); //没有必要
3.2.2返回值是指针

 const修饰的函数返回值要用const修饰的变量接收。

const char* func();
char* str = func();// error 
const char* str = func(); //right
3.2.3返回值是引用

 用得少。

3.3const修饰成员函数

const修饰成员函数为了保护成员变量,要求const函数不能修改成员变量,否则编译会报错。

class MyClass {
public:
    void func(int x) const;
};
4.const的特殊用法(类中定义变量)
// using c++11 standard
class CTest11
{
public:
    static const int a = 3; // Ok in C++11
    static int b = 4;       // Error
    const int c = 5;        // Ok in C++11
    int d = 6;              // Ok in C++11
public:
    CTest11() :c(0) { }     // Ok in C++11
};
 
int main()
{
    CTest11 testObj;
    cout << testObj.a << testObj.b << testObj.c << testObj.d << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值