IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++primer第二章:变量和基本类型 -> 正文阅读

[C++知识库]c++primer第二章:变量和基本类型

前言

我只写我觉得重要的,同时把一些我觉得比较重要的习题做一下

类型转换

类型所能代表的范围决定了转换的过程
比如:当我们把一个非布尔类型的算数值赋给布尔类型时,初始值为0则代表结果为false,否则结果为true
当把浮点数赋给整数时,会舍去小数部分。
当赋给无符号整数的值大于它表示的范围时,结果是这个值对(无符号整数最大值+1)取模。

变量声明与定义的关系

变量声明规定了变量的类型和名字,在这一点上定义与之相同,但是除此之外,定义还申请存储空间,也可能为变量赋一个初始值。如果要声明一个变量而非定义它,则使用extern关键词,但是如果给extern修饰的变量初始化了,就抵消了extern的作用

变量命名规范

  • 标识符体现具体含义
  • 变量名一般用小写字母
  • 用户自定义的类名一般用大写字母开头,如Sales_item
  • 如果标识符由多个单词组成,则单词之间应该有明显区别,如student_loan或者studentLoan

复合类型

符合类型是基于基于其他类型定义的类型。

引用

引用为对象起了另一个名字,引用类型引用另一种类型通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名
引用不是对象,而是一个已经存在的对象的另一个别名
由于引用不是对象,所以不存在引用的引用

指针

指针本身就是个对象,允许对指针赋值和拷贝,指针无需在定义时赋初值,和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将有一个不确定的值。
指针的值(即地址)应该属于下列4种状态之一

  • 指向一个对象
  • 指向紧邻对象所占空间的下一个位置
  • 空指针
  • 无效指针(上述指针的其他情况)
    *关于指向紧邻对象所占空间所占对象的下一个位置,说实话没太看懂,首先我在知乎查找了一下,然后又查看了一下英文版的c++ primer,发现其意思就是对象末尾的与其相邻的下一个位置,比如:
    int t=5;int p=&t,则p+1就代表这个紧邻对象所占空间的下一个位置,但是这个对象没有定义,所以原则上是不能解引用的

const限定符

默认情况下,const 对象仅在文件内有效

const的引用

可以把引用绑定到const对象上去,就像绑定到其他对象上去一样,称之为对常量的引用,对常量的引用不能用来用作修改其绑定的对象,比如:
有const int a=3,const int &b=a则&b=34,int &c=b这种行为是不允许的,因为&b=34会改变对象的值,而此时是常量,而int &c=b若可以的话则能通过&c=34来改变对象的值,这显然是不能允许的。

引用所引用的类型与其所引用对象的类型一致

指针和const

由于指针本身就是个对象,因此指针本身是不是常量以及指针指向的对象是不是常量就是两个独立的问题。用顶层const(top-level const)代表指针本身是个常量,而用名词底层const(low-level const)代表指针指向的对象是个常量

constexpr和常量表达式

常量表达式(const expression)代表值不会改变并且在编译过程中就能得到计算结果的表达式。
例子:
const int max_files=20 //是常量表达式
const limit =max_files+1//limit是常量表达式
int ret=20//不是常量表达式,因为其值会改变
const int sa=get_size()//不是常量表达式,因为其值需要到运行期间得到

常量表达式是由它的数据类型和初始值来决定的
c++11新规定允许将变量声明为constexpr类型以便由编译器来验证变量是否为常量表达式,声明为constexpr的变量一定是一个常量,而且必须由常量表达式初始化 例:constexpr int sa=20
在constexpr限定符种如果定义了一个指针,限定符constexpr仅对指针有效,对指针指向的对象无关

auto类型说明符

其作用是让编译器去分析表达式的类型,例:auto a=a1+a2,编译器会自动将a的类型转换成a1+a2结果的类型。

decltype

其作用是得出表达式的类型 例:decltype(f()) sum=y,sum的类型就是f()返回值的类型
如果表达式的类型是解引用操作,则decltype将得到引用类型,因为解引用操作能给得到指针所指向的对象,并且能改变对象的值,所以是引用
如果decltype使用一个不加括号的变量则得到的结果是该变量的类型,如果使用一个加括号的变量,则得到的结果是引用类型,因为加了括号就代表这个变量是一个表达式,而变量是作为左值的特殊表达式,所以是引用

头文件保护符

#ifdef 当且仅当变量已定义时为真,#ifndef当且仅当变量未定义时为真,一旦检查得到为真则一直运行直到遇到#endif为止

习题

练习 2.3:读程序写结果
unsigned int u=10,u2=42;
std::cout<<u2-u<<std::endl;//32
std::cout<<u-u2<<std::endl;//4294967264,其结果逻辑上是-32但是超出了其范围0-4294967295需要对4294967296取模得到4294967264

练习 2.27
下列那些初始化是正确的

  • int i=-1,&r=0;//错误,0为字面值常量,需要常量引用
  • int *const p2=&i2;//正确
  • const int i=-1,&r=0;//正确
  • const int *const p3=&i2;//正确
  • const int *p1=&i2;//正确
  • const int &const r2;//错误,因为引用不是对象,不能用const修饰
  • const int i2=i,&r=i;//正确
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:16:03  更:2021-08-31 15:16:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:49:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码