zoukankan      html  css  js  c++  java
  • c语言const和c++const

    1.常量

      常量是指值不能被改变的量,又叫做字面值

    1.1常量分类

    1)字符常量:'a', 'A', '*'。

    2)字符串常量:"helloworld","ilovechina","12345"

    3)整型常量: 25,10,012,0x0a,0b00001010

    4)浮点型常量: 3.14,123.456, 3.0E-23

    2.c语言的const

    1)c语言用关键字const将变量修饰成只读变量,还是属于变量范畴

    2)const变量仍然是变量,只是具有只读特性,所以不能用来定义数组维度

    3)const变量一旦创建后其值就不能被改变了,所以const变量需要在定义时初始化

    3.c++的const

    3.1修饰变量

    1)const修饰的变量必须初始化

    2)c++对const进行了优化,const修饰的变量的可以成为常量表达式,在c++中会进行常量折叠(在编译阶段出现该变量的地方会进行值替换),正因为这个优化,所以在这种情况下c++中const变量成为了常量,可以用它来定义数组维度

    3)const变量的内存分配问题:

      情况1:const修饰的全局变量存放在.rodata段中

      情况2:对于const修饰的局部变量,当定义const局部变量为常量表达式时(如:const a=5),此时不为它分配内存,而是放入符号表中,但当第一次对它做地址相关的操作(如:取它的地址&a 或 用它给别的变量赋值int b=a)时,此时才会对a分配内存(在DEBUG模式下面的反汇编,编译器生成汇编代码为了能更好的调试,所以无论如何都会分配空间给const常量,但是如果你打开编译器的O2优化选项的话,就不会分配空间了)

    3.2c++建议使用 const 全局变量来替换一般常量的宏定义

    3.3修饰函数类的成员函数

    3.4修饰指针/引用

    4.c++常量折叠

    4.1概念

      c++中,如果const变量的值是常量表达式,那么在编译阶段出现该变量的地方会进行值替换

    4.2注意

    1)在对这种变量进行取地址的操作(&)时,不发生常量折叠

    2)关键字volatile可屏蔽常量折叠

  • 相关阅读:
    UIScrollView
    xcode debug
    ios 开发小技巧
    xcode调试
    Objective-C的反射机制
    git 命令
    iOS block的一些理解
    iOS 开发常用宏
    iOS 常用函数
    转:支付宝系统架构(内部架构图)
  • 原文地址:https://www.cnblogs.com/Joezzz/p/10268022.html
Copyright © 2011-2022 走看看