【C++学习】基础知识:常量

C++常量

【C++学习】以w3cschool的教程为框架,记录总结C++Primer第五版的学习内容。

常量

  • 常量是固定值,在程序执行期间不会改变,这些固定的值又叫做字面值

  • 常量可以是任何的基本数据类型,可分为整型和浮点型字面值、字符和字符串字面值、转义序列、布尔字面值和指针字面值;

整型和浮点型字面值

  • 整型字面值可以是十进制、八进制或十六进制的常量,0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

  • 浮点字面值由整数部分、小数点、小数部分和指数部分组成,可以使用小数形式或者指数形式来表示浮点常量。

字符和字符串字面值

  • 由单引号 '' 括起来的一个字符称为char型字面值,双引号" " 括起来的零个或多个字符则构成字符串型字面值
  • 字符串字面值的类型实际上是由常量字符构成的数组:
    • 编译器在每个字符串的结尾处添加一个空字符'\0',因此字符串字面值的实际长度要比它的内容多1;
    • 一个字符串可包含char型字面值、转义序列等。

转义序列

转义序列含义
\\ 字符
’ 字符
"" 字符
?? 字符
\b退格键
\f换页符
\n换行符
\r回车

布尔字面值和指针字面值

  • truefalse是布尔类型的字面值;
  • nullptr是指针字面值。

const限定符

  • 可以使用 const 对变量的类型加以限定:

    const type variable = value;
    
    • 由于const对象一旦创建后其值就不能再改变,所以const对象必须初始化,且初始值可以是任意复杂的表达式。
    • 默认状态下,const对象仅在文件内有效,如果想在文件间共享const对象,必须在变量的定义前添加extern关键字。
  • const的引用

    • 可以把引用绑定到const对象上,称之为对常量的引用(reference to const);

    • 非常量引用不能绑定到常量对象上

      const int ci = 1024;
      const int &r1 = ci;
      int &r2 = ci; //错误
      
    • 在初始化常量引用时允许用任意表达式作为初始值,只要该表达式能转换成引用的类型即可;

    • 允许为一个常量引用绑定非常量的对象、字面值、甚至是一般表达式。

  • 指向常量的指针

    • 要想存放常量对象的地址,只能使用指向常量的指针(pointer to const);

      const double pi = 3.14159;
      const double *cptr = π
      
    • 指向常量的指针不能用于改变其所指对象的值,但该对象是否能改变依赖于所指对象的类型;

    • 允许令一个指向常量的指针指向一个非常量对象;

  • const指针

    • 允许把指针本身定为常量,常量指针(const pointer)必须初始化;

    • *const说明指针是一个常量;

      const double pi = 3.14159;
      const double *const pip = π
      
    • 指针本身是一个常量并不意味着不能通过指针修改其所指对象的值,能否这样做依赖于所指对象的类型。

  • 顶层const和底层const

    • 顶层const表示对象本身是const,底层const表示指针所指的对象是const
    • 对一般对象,只有顶层const;
    • 对指针这种,本身是一个对象,又指向一个对象,故用顶层const表示指针是const,用底层const表示存放的地址为const(即指向的对象为const);
    • 对声明引用的const,都是底层const,因为引用本身不是对象,故不可能有顶层const。
  • 常量表达式

    • 指值不会改变并且在编译过程中就能得到计算结果的表达式,用常量表达式初始化的const对象也是常量表达式,字面值常量属于常量表达式
    • 一个对象(或表达式)是不是常量表达式由他的数据类型和初始值共同决定。
  • constexpr变量

    • 声明为constexpr的变量一定是一个常量,并且必须用常量表达式初始化;

    • 限定符constexpr仅对指针有效,与指针所指的对象无关:

      const int *p = nullptr;//p是一个指向整型常量的指针
      cosntexpr int *q = nullptr;//q是一个指向整数的常量指针
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值