C++ Primer 抄书笔记(二)——变量和基本类型(上)
一、基本内置类型 base build-in type【算数类型/类型转换/字面值常量】
基本内置类型(算数类型arithmetic type(整型integral type(字符,布尔bool),浮点型(单精度float,双精度double,扩展精度ex)),空类型void)
//算数类型arithmetic type
C++标准规定尺寸最小值,具体还得看编译器。
基本字符类型(机器字节char,自然语言Unicode:char16_t,char32_t);
byte字节->大多数 8bit->可寻址最小内存块;
word 字->大多数 32bit/64bit->存储的基本单元;
signed/unsigned 符号/无符号:unsigned=unsigned int;字符型 char/signed char/unsigned char各不相同,其中char/unsigned char由编译器决定。
eg:内置类型机器实现 1word=4byte=4*8bit
类型,决定了数据所占的bit数,以及,该如何解释这些bit内容。
tip:选择类型时
无负数值 -> unsigned;
超过int -> long long;
整数(不大) -> signed/unsigned char;
浮点数 -> double;
//类型转换convert
定义definition:(条件condition:类型type=数据data+运算operation)一种被大多数类型支持的运算。
不可移植性nonportable:程序依赖现实环境(将int尺寸看成不变的值);
给signed type赋值 超出范围->undefined未定义;
给unsigned type赋值 超出范围->此type取模后的余数;
eg:int尺寸为4byte;2^32=4294967296;
unsigned ui=;
int i=-;
ui+i=10+(2^32-42)=4294967264;
unsigned u1=,u2=;
u2-u1=10-42+2^32;
ps:while/for中unsigned要小心 i++/++i;
//字面值常量literal
literal的data type由其形式和值决定。
switch(type){
case 整型/浮点型:
十进制:int~long long;//十进制字面值不会为 负,即“-”不保存在字面值内
八进制0,十六进制0x:(signed/unsigned)int~long long;
short无字面值;
case 字符/字符串:
char -> ' '
string -> " " ->数组array(+'\0',length+1)
//tip:格式
std::cout<<"hello"
"world"<<std::endl;
case bool:
true/false;
case pointer:
nullptr;
case 转译序列:
nonprintable:\n \t \v
单引号/双引号/问好/反斜线:\' \" \? \\
和字符集相关:(此处为Java语言)
case ex_指定:
前缀:L、U、u、u8;
后缀(不分大小写):U、L、LL;F、L;
}
二、变量variable【定义/声明/标识符/存储空间/作用域】
definition:有名字可操作的存储空间;
变量variable=对象object-值value(只读)。
//定义definition(type+name+space)
初始化initialized:创建时赋值;
ps:赋值:擦除->替代;
默认初始化default initialized:(condition:type+location(函数体function body))外:有默认值;内:build-in type->uninitialized;
ps:目前书上就写了这么多,先将就着往下看吧。
列表初始化list initialization:
//初始化int units_sold 为0,C++11均可全面应用
int units_sold=;
int units_sold={};
int units_sold{};
int units_sold();
//列表初始化+风险信息=编译报错
long double pi=3.1415926536;
int a{pi},b={pi};//错误:存在丢失风险
int c(pi),d=pi;//正确:确实丢失
tip:初始化每一个build-in type变量,因为编译器不想找你这个错误。
//声明declaration(type+name)
分离式编译separate compilation,定义只能一次,要用的话声明就好啦;
extern int i;//不可初始化:搞不懂的话请看声明的定义
C++是静态类型statically typed语言,有类型检查type checking:看此type是否支持此operation。
//标识符identifier
错:{
_ _xx;
_Xxx;
_xxx;//function body外
关键字key;
操作符代替名:and/or/bitand/。。。;
}
//作用域scope
同名+不同位置=不同实体;
global scope;block scope;inner/outer scope(就近原则);
「p44 ::xxx」//意思意思,想不起来的话看书去
三、复合类型compound type【引用/指针/声明】
//引用reference(lvalue reference)
引用本身不是对象object,所以不能definition,只能说绑定bind。因为要bind,所以必须初始化。
引用不支持类型转换。//emm... 这句话有骨头可挑,可我的意思不是你理解的我的意思
int iVal=;
int &refVal=iVal;
int &refVal_=refVal;
//指针pointer
pointer是一个对象。
指针可做condition,nullptr:false。
可定义无初始值,默认初始化同function body内的build-in type:uninitialized。
取地址符&;解引用符*。
int *p=&iVal;
//不能定义指向引用的指针
空指针null pointer:
int *p=nullptr;//best way
int *p=;//不能把int变量直接赋值给指针,很绕,请看书
int *p=NULL;//#include<cstdlib>的预处理变量preprocessor variable
void* 指针:
可存放任意对象的地址/任意类型指针,但不能直接操作其对象。内存空间仅仅是内存空间。
tip:请初始化所有指针。
指向指针的指针的指针:
int iVal=,*pi=&iVal;
int ***pppi=π
指向指针的引用:
int *&r=pi;//就近原则,r引用是一个指针,r引用指针是int型
r=&iVal;//r引用指针,令pi指向I
*r=;//r引用指针,解引用得i,即i=0
//声明declaration(up,一部分内容已整合)
同一条definition语句,base type只有一个,但声明符形式可不同,因为声明符包含类型修饰符。
int* p1,p2;//p1是指针,p2是int
int*/int *:强调重点不一样。
C++ Primer 抄书笔记(二)——变量和基本类型(上)的更多相关文章
- C++ Primer 学习笔记_5_变量和基本类型(续2)
变量和基本类型 七.枚举 枚举不但定义了整数常量集,并且还把它们聚集成组. 枚举与简单的const常量相比孰优孰劣, 通过以下一段代码. 一看便知: enum {input, output, a ...
- 《C++ Primer》读书笔记(二)-变量和基本类型
bool类型与其他类型转换时,0为false,1为true 浮点数赋值给整数的时候,进行近似处理,结果仅保留浮点数小数点之前的部分 整数赋值给浮点数的时候,小数部分记为0,如果该整数超过了浮点类型的容 ...
- 02.第二章_C++ Primer学习笔记_变量和基本类型
2.1 基本内置类型 2.1.1 算术类型 算术类型包括两类:整型和浮点型 2.2 变量 2.3 复合类型 2.4 const限定符 2.5 处理类型 2.6 自定义数据结构
- C++ Primer 第2章 变量和基本类型
C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...
- C#笔记(二)变量
C#把数据类型分为两种 ● 值类型 ● 引用类型 从概念上看:其区别是值类型直接存储其值,而引用类型存储对值的引用 这两种类型存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上 如果变 ...
- C++ Primer : 第二章:变量和基本类型(1)
变量和基本类型之第一篇:基本内置类型和变量 一. (1) C++定义了一套包括算数类型和空类型,这些类型有:布尔类型bool,字符类型char,宽字符类型wchar_t,Unicode字符char16 ...
- (C/C++学习笔记) 二十三. 运行时类型识别
二十三. 运行时类型识别 ● 定义 运行时类型识别(Run-time Type Identification, RTTI) 通过RTTI, 程序能够使用基类的指针或引用来检查(check)这些指针或引 ...
- (C/C++学习笔记) 九. 变量的存储类型
九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...
- C++ Primer抄书笔记(二)——变量和基本类型(下)
四.const限定符[引用/指针/顶层/常量表达式] const对象值不变,必须初始化,能完成此type的大部分operation. 一般,多文件独立变量,编译初始化仅文件内有效: 除非,(条件:初值 ...
随机推荐
- 在 Ubuntu 上安装 K8S教程
在 Ubuntu 上安装 K8S教程 1,更新系统源 如果系统本身自带得镜像地址,服务器在国外,下载速度会很慢,可以打开 /etc/apt/sources.lis 替换为国内得镜像源. apt upg ...
- Shell考题中级篇
写脚本实现,可以用shell.perl等.把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数. grep -v -x bbb -f aaa > ccc && ...
- Centos 7 最小化时间服务部署配置
基本原理 Centos 7 我所了解有两种时间服务,NTPD与chronyd:两者对Centos 7 的支持都很好,有对chrony非常夸赞的,不过我这里只讲ntpd:有对chrony有想法的可以自行 ...
- Java之路——初识Eclipse
零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...
- 搭建DevOps模式的项目
在后端的开发领域,各类开发框架都已经很多,在开发项目时可以根据不同的需要和需求选择合适的开发框架.然而在需要开发一个完善的工程化项目时,仅仅一个后端开发框架是不够的,还面临着在对开发项目的快速迭代中进 ...
- vue-particles做背景,鼠标动画粒子连线填坑(按钮没有点击响应)
为了提高页面展示效果,登录界面内容比较单一的,粒子效果作为背景经常使用到,vue工程中利用vue-particles可以很简单的实现页面的粒子背景效果. 解决问题: 以背景方式显示 无法获取按钮焦点, ...
- ThreadLocalRandom ---- 提升Random在大并发下的效率
本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 随机数 随机数在科学研究与工程实际中有着极其重要的应用! ...
- Netty学习(1):IO模型之BIO
概述 Netty其实就是一个异步的.基于事件驱动的框架,其作用是用来开发高性能.高可靠的IO程序. 因此下面就让我们从Java的IO模型来逐步深入学习Netty. IO模型 IO模型简单来说,就是采用 ...
- Affinity Propagation
1. 调用方法: AffinityPropagation(damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=N ...
- HDU_5045_状态压缩dp
http://acm.hdu.edu.cn/showproblem.php?pid=5045 i从1到m依次更新,dp[i][j]表示更新到i题时,j表示每个人的答题状态,分别用0和1表示(因为每个人 ...