美文网首页
const 关键字 - iOS

const 关键字 - iOS

作者: 下班不写程序 | 来源:发表于2020-09-18 15:41 被阅读0次

    一、const与宏的区别

    1. 处理时刻:宏是预处理时(即在预处理时把宏展开,替换为原来的值, 没有类型,不做类型检查),const是编译运行时(编译器在编译时会检查错误,程序在运行时,从内存(堆或栈)中读取)
    2. 编译检查:宏不会编译报错,const会报编译错误
    3. 宏能定义一些函数,方法。 const不能。
    4. 宏不会开辟新的内存空间 ,而是存放在常量区, 所以大量使用宏,会使编译时间太久,因为每次编译都需要替换, 并且导致二进制文件变大

    二、const的用法

    1.修饰基本数据类型 (两种方法是一样的)

        int const a = 1;
        const int b = 2;
        
        a = 3; // 报错: Cannot assign to variable 'a' with const-qualified type 'const int'  无法为具有const限定类型“const int”的变量“a”赋值
        b = 3; // 报错: Cannot assign to variable 'b' with const-qualified type 'const int'
    

    2.修饰指针类型 (const只修饰右边的变量)

        int a = 1;
        int b = 2;
        int *const p = &a;
        *p = 30;
        
        p = &b; // 报错: Cannot assign to variable 'p' with const-qualified type 'int *const'
    

    指针指向的地址无法改变,但是可以通过指针改变指向地址说保存的值; const右侧是p , 所以p 的值不可以修改, 但是*p 就可以修改.

        int a = 1;
        int b = 2;
        int const *p = &a;
        *p = 30; // 报错: Read-only variable is not assignable 只读属性不能被赋值
        p = &b; 
    

    指针指向的地址可以改变,但是无法通过指针改变指向地址说保存的值; const右侧是p , 所以p 的值不可以修改, 但是p 就可以修改.(int const *pconst int *p效果一致)

    1. const同时在指针符号两边
        int a = 1;
        int b = 2;
        int const * const p = &a;
        *p = 30; // 报错: Read-only variable is not assignable
        p = &b;  // 报错: Cannot assign to variable 'p' with const-qualified type 'const int *const'
    

    指针指向的地址不可以改变,同时无法通过指针改变指向地址说保存的值; *p和p 都不可修改

    1. static与const联合使用
    1. 声明一个只读的静态变量: 了防止重复声明全局变量。 在开发中声明的全局变量,有些不希望外界改动,只允许读取。这时就需要两者一起使用.
    2. 声明一个静态的全局只读常量: 比如一个基本数据类型不希望别人改动 // static const int a = 10.
    3. 也可以用来代替宏,把一个经常使用的字符串常量,定义成静态全局只读变量.
    1. extern与const联合使用
      多个文件中经常使用的同一个字符串常量, 比如系统的通知的key 的设计
    UIKIT_EXTERN NSString *const UITableViewSelectionDidChangeNotification;
    
    1. static与const组合:在每个文件都需要定义一份静态全局变量。
    2. extern与const组合:只需要定义一份全局变量,多个文件共享。
        // extern + const 的使用
        //.h文件声明
        extern NSString * const string;
    
        //.m文件定义
        NSString * const string = @"string";
    

    .End

    相关文章

      网友评论

          本文标题:const 关键字 - iOS

          本文链接:https://www.haomeiwen.com/subject/fvrjyktx.html