zoukankan      html  css  js  c++  java
  • C/C++里的const(2)

    对于如下几个语句,哪些定义相同?哪些定义不同?哪些数据可修改?哪些数据不可修改呢?

    1 const int a;
    2 int const a;
    3 const int *a;
    4 int *const a;
    5 int const *const a;

    在C/C++中,const是一个数据类型修饰符,常见的还有short、long、unsigned、static、extern等,定义变量的方式采用:

    (修饰符+数据类型) 变量名称

    注意:如果有修饰符,则修饰符和数据类型的位置不影响变量的定义,比如int short和 short int语义是一样的。

    因此,const int a 与 int const a 所表达的意思相同,都是定义了一个const int型的变量,数值不可修改。

    对于指针变量类型的理解:

    首先()、[]、*这三个符号的优先级依次降低,所以下面两个语句意思不同:

    1 int *a[10]; // 定义了一个10位数组,每个成员都是指向int的指针
    2 int (*a)[10];//定义了一个指针,指针指向了一个有10个int型的数组

    同时需要记住指针作用是从右往左。

    在回过头来看后三个语句,就很容易发现:

    const int *a表示a是一个指针,指向了const int型,指向的数据不可修改;

    int *const a表示const a 是一个指针,指向了一个int型,指向的数据可以修改,指针不能指向别的地址了;

    int const *const a表示const a是一个指针,指向了一个const int 型,指向的数据不可修改,指针也不能指向别的地址了。

    注意:

    typedef void* VP;
    const VP ptr;
    const void *ptr;

    两个ptr的定义是否相同?答案是不同。typedef定义的是一种新的数据类型,因此const VP ptr 与 VP const ptr语义相同,所以在这句中ptr是一个const类型,存储在代码段里;而const void *ptr是一个普通指针,指向了const void类型的数据,它可以指向别的地方,存储在数据段里。因此两个语句存储位置不一样。

    为什么要用const?

    1. 给别的程序员传递一种信息:不要修改这个值;
    2. 有可能让编译器产生精简的代码?减少bug?(目前不太理解这句话)
    3. 合理保护只读数据;

    使用位置:

    1. 定义常量,防止被修改;
    2. 函数参数,防止函数修改作为函数参数的变量值
    3. 在C++中,类成员函数的使用
  • 相关阅读:
    OGRE 3D 1.7 Beginner‘s Guide中文版 第一章
    一个人的成功取决于晚上的8点至10点--经典语录必读
    学历代表过去、能力代表现在、学习力代表未来
    理财达人五步走
    Ogre场景、节点、摄像机通过自动、鼠标、键盘控制移动
    QT按钮背景颜色设置及文字显示位置设置
    Qt一个工程调用另一个工程的类成员变量
    C++搜索字符串中的汉字
    Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)
    PAT(Advance Level)Practice1001
  • 原文地址:https://www.cnblogs.com/jacklu/p/4433544.html
Copyright © 2011-2022 走看看