zoukankan      html  css  js  c++  java
  • const的使用

    1.怎样判断const把谁定义成了常量?

    要看const吧谁定义为了常量,只需要看const右边的变量即可

    int * const a;是把a定义为了常量,而*a是可以改变的

    int const * a;是把*a定义成了常量,a是可以改变的

    int const * const a;是把a和*a都定义成了常量,都不能被修改

     

    2.const用在什么时候

    --1如果不希望自己的变量呗修改,应该定义为const类型

    例如写函数时为了确保变量*p不被修改可以写成

    void test(const int *p){}

    --2 const还可以替代宏定义

    3.在使用const遇到#define和typedef时应注意的情况

    例如下面的问题

    下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?

    typedef char * pStr;

    char string[4] = "bbc";

    const char *p1 = string; //1式

    const pStr p2 = string; //2式

    p1++;

    p2++;

    答案是p2++不对,为什么呢?

    1)const使用的基本形式: const type m;限定m不可变。替换基本形式中的m为1式中的*p1,替换后const char *p1;限定*p1不可变,当然p1是可变的,因此问题中p1++是对的。

    替换基本形式中的type为2式中的pStr,替换后const pStr m;限定m不可变,题中的pStr就是一种新类型,因此问题中p2不可变,p2++是错误的。

    而如果将typedef换为#define就可以运行通过,为什么呢?

    因为#define 是直接替换代码,所以p2跟p1一样

    而typedef 是将char *作为一种新的类型,名字是pStr,是一个整体,不是类型+指针,所以按照typeDef,pStr是不能改变的,即p2不能被改变

    P.S.  const和数据类型是可以互换位置的例如:

    const int a;和int const a;是一样的

    const int *a 和int const *a是一样的

    4.const一些赋值问题

    int const a = 8;

    int *p = &a;//这句是报错的,因为a被const约束以后,不能把自己的地址赋给别的指针

    同样的,如果

    const int a = 10;

    int &af = a;//这句也是报错的,因为const约束以后,不允许给a起别名(引用a)

    5.const和引用混合使用的问题

    首先引用必须跟要引用的变量类型相同

    double d = 10.5;

    int &a = d;//这句是会报错的,因为类型不匹配

    const int &df = d;//这句是不会报错的,因为如果引用和const同时使用,并且类型不匹配的情况下,系统会拆分成两句执行

    --1.int temp = 10.5;

    --2.const int &df = temp;

    此时df跟d没有关系(地址不同,此时df已经不是引用的d)

    如果类型匹配 const double &df = d;

    就是常规的思路,df还是引用d

  • 相关阅读:
    【Elasticsearch学习】DSL搜索大全
    【Elasticsearch学习】文档搜索全过程
    【Elasticsearch学习】之基础概念
    【Elasticsearch学习】之一图读懂文档索引全过程
    echarts自定义tooltip显示
    最小生成树之克鲁斯卡尔算法
    最小生成树之prime算法
    spring security learning(spring in action)
    Radix_Sort
    Python一键获取日漫Top100榜单电影信息
  • 原文地址:https://www.cnblogs.com/xyzaijing/p/3604347.html
Copyright © 2011-2022 走看看