zoukankan      html  css  js  c++  java
  • const的全面理解

    const关键字用来作甚?const是一个类型修饰符。常见的类型修饰符有哪些?

    short long unsigned signed static autoextern register

    定义一个变量。

    (1)类型描述符中如果有多个关键字,他们出现的位置不影响对变量的限制。

    short int i;

    int short i;

    const int a;

    int const a;//上面两个是一样的。

    (2)

    const int *a;

    int* const a;

    int const* const a;

    对指针类型变量的理解。

    (a)[] () *在数据定义时与在表达式中优先级一样,例如:

    int*a[10];//因为[]的优先级高于*。因此是一个数据,每个成员类型为指针,指向int

    int (*a)[10]//因为()优先级高于[],因此,先看里面是一个指针,指向类型为数组  

    指针的判断是从右至左,

    (b)

    const int *a;//a是变量名,*表示他是一个指针,指向的类型已经确定,

          //他是指向一个const int的类型,并且数据不可修改

    int *const a; //*const 一起来修饰a,即a只读,*表示a是一个指针,

                      //因此,这是一个只读的指针,指向的类型为int型的变量。数据可以修改

    int const* const a;//*表示指针,因此指针不可修改,int const是指针指向的类型,仍然是const。

              //因此,都不可以修改

    栗子:自己验证

    #include<stdio.h>

    int main()

    {

      char static data_var='c';

      char const data_const='b';

       char *const p1=&data_var;

      //p1=&data_var;

      const char *p2=&data_const;

      //*p2='f';

      return 0;

    }

    (3)

    typedef void* VP;

    const void *ptr//存储位置;

    const VP ptr //存储位置;

    首先要理解typedef 是定义一种数据类型。一定要与define区分开来。

    typedef void* VP;//VP是类型的名字,余下的是这个类型的真实类型

    const VP ptr;是不是替换为const void *ptr;?void*是以这个整体。

    const int i;==int const i;

    VP const ptr;即 void* const ptr;

    const 作用:

    向其他程序员传递一个信息。这个不要修改。

    有可能让编译器产生更精简紧凑代码,减少bug

    合理的保护我们只读的数据,避免不必要的错误

    使用位置:

    定义常量。防止被修改

    函数的参数中,如果不希望子函数去修改被调用函数的某个数据,加以限制

    在C++中,类的成员函数的使用。

  • 相关阅读:
    Privacy & Logic
    Rules of Evidence
    Court terms & Judicial opinions
    Objections in Court
    US Trial Procedures
    Jeremy Jaynes v. Va.
    C++\CLI编程(一、命名空间)
    C++\CLI编程(一、命名空间)
    C++关于#include 两种 引用方式
    C++关于#include 两种 引用方式
  • 原文地址:https://www.cnblogs.com/zsq1993/p/5792065.html
Copyright © 2011-2022 走看看