栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

C++常量

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

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

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

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

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

字符和字符串字面值
  • 由单引号 '' 括起来的一个字符称为char型字面值,双引号" " 括起来的零个或多个字符则构成字符串型字面值;
  • 字符串字面值的类型实际上是由常量字符构成的数组:
    • 编译器在每个字符串的结尾处添加一个空字符'',因此字符串字面值的实际长度要比它的内容多1;
    • 一个字符串可包含char型字面值、转义序列等。
转义序列
转义序列含义
字符
’ 字符
"" 字符
?? 字符
b退格键
f换页符
n换行符
r回车
布尔字面值和指针字面值
  • true和false是布尔类型的字面值;
  • 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是一个指向整数的常量指针
      
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836154.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号