吹静静

欢迎QQ交流:592590682

const是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。

1. 修饰常量

用const修饰的变量是不可变的,(错误演示):

使用 const 修饰变量 x ,使得变量 x 变成常量,此时再修改 x 的值就会出错,禁止修改。

#include<iostream>
#include<stdlib.h>
using namespace std;

int main(void)
{
    const int x = 3; // int const x = 3,和前一种是等价的
    x = 5;             // 此时x是一个整型常量,不可修改,编译出错。
    system("pause");
    return 0;
}

2. 修饰指针

如果const位于 * 的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于 * 的右侧,const就是修饰指针本身,即指针本身是常量。
因此,推荐使用int const* p,而不是使用const int* p(虽然两者意义完全一样),这样更容易理解。

用 const 修饰指针变量 *p ,这样 *p 就变成常量,此时修改 *p 的值就会出错,但是修改 x 的值不会出错,

#include<iostream>
#include<stdlib.h>
using namespace std;

int main(void)
{
    int x = 3; 
    int const *p = &x; // const int *p 两者等价
    *p = 5; // 编译报错 
system("pause"); return 0; }

因为 const 修改的是指针变量 *p ,而不是地址,所以 p 是可以修改的,但是修改的时候要赋地址,不能赋1,2,3这样的数值。

#include<iostream>
#include<stdlib.h>
using namespace std;

int main(void)
{
    int x = 3; 
    int y = 5;
    int *q = &y;
    int const *p = &x; // const int *p 两者等价
    // *p = 5; // 编译报错 
    p = &y; // 把y的地址赋给p ,p 指向 y ,*p = 5
cout
<< "*p = " << *p <<endl; cout << " p = " << p <<endl; system("pause"); return 0; }

运行结果:

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

int *const p 此时 const 修饰的是 “指针p” ,p 是一个地址,也就是说这个地址是一个常量,

*p = 10 这里修改的是 指针变量 *p ,而不是 指针 p ,所以不会报错,修改之后 x 的值也会随之发生变化。

p = &y 而这里修改的是 指针 p ,也就是说修改了地址,而地址是常量,不能修改,所以会出错。

#include<iostream>
#include<stdlib.h>
using namespace std;

int main(void)
{
    int x = 3; 
    int y = 5;
    int *const p = &x;

    *p = 10; // 编译通过
    p = &y;  // 编译报错

    system("pause");
    return 0;
}

3. 修饰引用

&z = x :z 是 x 的别名,const将 别名 z 变成常量,此时给 z 赋值就会出错,但是给 x 重新赋值是可以的

#include<iostream>
#include<stdlib.h>
using namespace std;

int main(void)
{
    int x = 3; 
    int y = 5;
    int const &z = x;
    z = 10; // 编译错误

    system("pause");
    return 0;
}

4. 修饰函数参数

用const修饰函数参数,传递过来的参数在函数内不可以改变。

用const修饰函数参数的主要作用就是使不想被修改的函数参数变成常量,在函数里不能随便修改函数参数。

#include<iostream>
#include<stdlib.h>
using namespace std;

void fun (const int &a,const int &b);

int main(void)
{
    int x = 3; 
    int y = 5;
    fun(x,y);
    cout << x << "," << y << endl;

    system("pause");
    return 0;
}

void fun (const int &a,const int &b)
{
    a = 10; // 编译出错
    b = 20; // 编译出错
}

 

 

 

posted on 2018-05-10 11:50  吹静静  阅读(284)  评论(0编辑  收藏  举报