《C++ Primer》读书笔记 第二章——变量、引用、指针、常量和类型

原创 2018年04月17日 00:09:51
(写在前面:该读书笔记摘录C++ primer中需要注意的知识点,是普通大学课程里或者常见面试题里比较少提到的知识点)

数据类型:
★long double 是96或128比特
★char与 signed char不一样,  实际上char表示为有符号还是无符号取决于编译器
因此不要用char去做运算,而应该做比较

★执行浮点数计算一般直接用double, 速度不比float慢,而且尽量不要用long double

★无符号整数和有符号整数相加,  有符号数变为无符号数(故不可以让负数与无符号数相加)

★没有空格,紧邻的2个字符串实际上是一个字符串“abcd""adf"
故s="afda""dfaf"是合法的

★\123 是八进制的, \x123是十六进制的
\1234,则123是1个字符,4是一个字符

★可以通过添加后缀,来修改字面值(非变量 )的默认类型
例如
123默认为int
那么123U 则是无符号int
123UL 是无符号long
123ULL 是无符号long long

123.0默认为double
123.0F认为是float
123.0L认为是long double

对于字符
u'a'指16位
U'a'指3位



变量
★能存储数据,具有某种类型的内存空间。 
★初始化不等于赋值,    赋值涉及擦除当前值

★int a = 0, 也可以是 int a(0)
C++11中可以用花括号来初始化变量。 叫做列表初始化
int a{0} 或者 int a = {0}
这个初始化会将丢失情况的初始化报错
例如 int a{1.2345},则会报错,因为会丢失

★内置类型(int double)等变量的初始化,如果是函数体外(全局),则初始化为0
在函数体内的则是未定义的值。所以最好每次定义变量时,都要初始化。
类的对象必须有初始化操作

★声明时如果初始化了,那么就变成了定义
extern int i, 则声明了i,但是没定义,i要在别的文件找
不可以extern int i =0,  因为这样extern就没有意义了

★C++是静态类型语言:编译阶段检查类型

★标识符规范:
变量名用小写字母开头
类名用大写字母开头
多个单词间用下划线区分,或者大写字母区分,但是记住,变量名是这样写studentIndex, 而不是StudentIndex
开头必须是字母或下划线,不可以是数字


★全局作用域和块作用域

:★:abc ,  则引用了全局的变量abc
尽量不要让全局名字和局部名字相同

引用:
★l引用必须初始化,不能重新绑定其他对象。
不能引用值,并且引用没有强制转换
int &val = 1 错
double dval=1.0 
int &val = dval 错


指针
★l空指针生成方法:
int *p=nullptr或0或NULL
尽量使用nullptr

★l空指针在if判断中为false
非空指针在if判断中为true

★lvoid *可以指向任何对象
但要使用时,必须要进行类型转换

★lint* p1,p2, 则只有p1是指针

★l引用可以引用指针
但是指针不能指向引用


常量
★lconst也必须初始化,不能改变
★l若想在多个文件中共享全局const,则必须为每个const添加extern,即使是定义部分

★l不能普通引用 常变量 
const int ci
int  &ri =ci 是错误的


★l常量引用:  const int &r2 = 恒定的数字或者变量
常引用干吗的?不能直接引用吗?
普通引用 int &b = a;
常量引用 const int &b = a;
a改变时, b的值都会改变
但是常量引用中,不可以执行b = x的操作,即只能a改变b,但是b不能改变a

同理, 普通指针不能指向常量
但是常量指针可以指向常量

★l顶层const表示指针本身是个常量,即int *const  p
底层cosnt表示指针指向的是常量,   即const int *p
不能改变该名字的都叫顶层const
能改变该名字,但是不能改变该名字所指向的东西,叫底层const
  当底层const作为赋值时,只能有
底层const = 底层const
或者底层const = 顶层const

但是不能其他引用或顶层const = 底层const

★lconst int sz = f()并非常量表达式, 因为它直到函数运行才知道结果
constexpr int a 与const int a相同,但是a必须是一个常量表达式,即他的值是确定的,而不是运行时才知道
constexpr int a = size()一定错误吗?
如果size()返回的也是constexpr int类型,说明大家的值都是一开始就可以初始化的,所以是对的

★constexpr能指的限制:  
只能是算数类型、引用、指针,不能是其他乱七八糟的类
不能指向定义在函数体的变量(局部变量)
必须指向静态或者全局变量
必须是0,nullptr或者“固定”地址中的变量

★lconst int *p和constexpr int *q不同
前者是指向常量的指针,即指向处不可改
而后者等同于 int *const p,  即只对指针有效



其他
★l别名:
typedef  旧名字  新名字
using 新名字 = 旧名字
typedef char *pc
则pc 就是 char *的别名
但是注意:
const pc cstr = 0,  cstr是指向char【【【【【【【【【【【【【【【的常量指针, cstr不可改, *cstr可改
而 cosnt char *cstr=0, cstr是指向char *的指针,*cstr不可改,cstr可改


★lauto 自动确定类型
auto 某常量,  则忽略顶层const, 不认为是const
auto &某常量, 则认为是底层const, 即 指向常量的指针
想要顶层const, 则用 const auto


★ldecltype(函数 或者表达式)   sum = x, 即decltype通过返回类型来判断类型,但是不会去计算答案

★ldecltype可以返回顶层const
decltype(*p) 则返回*p所指的类型, 如果*p=&i, 则类型就是int &
i是int,  则加了括号的decltype((i)) 是引用类型
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a799581229/article/details/79968782

c++ primer(第五版)学习笔记及习题答案代码版(第二章)

chapter 2 1、当我们把一个超出其取值范围的值赋给一个指定类型的对象时,结果取决于这种类型是signed还是unsigned的。        A 对于unsigned类型,编译器必须调整越界...
  • refuil
  • refuil
  • 2016-04-24 23:11:23
  • 1204

C++ 引用和指针的区别 常量指针和指针常量的区别

       指针指向一块内存,它的内容是所指内存的地址;       引用是某块内存的别名    引用的一些规则如下:    (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。  ...
  • a799581229
  • a799581229
  • 2016-09-02 10:11:05
  • 352

C++中 常量引用、指向常量的指针、常量指针的区别

先初步了解引用、指针的一些注意事项。 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; ...
  • Rueing839
  • Rueing839
  • 2015-09-13 17:11:11
  • 2044

c++primer 第五版 指向常量的指针和常量指针

c++ primer中对于“常量指针”的定义和网上的版本相反,而且删去了"指针常量"的概念,引入了一个新的概念——"指向常量的指针”,但各种类型的含义还是一致的,只是叫法不一样了。举例: int a;...
  • moses1213
  • moses1213
  • 2015-05-21 21:18:05
  • 1538

C++常量详解(一)常量指针与常量引用的初始化

1、常量 1.1、常量的初始化: const对象一旦创建后其值就不能再改变,所以const对象必须初始化。这里我们要注意一点,像const int *p和const int &r都并不...
  • Jang1996
  • Jang1996
  • 2016-10-08 11:46:23
  • 766

常量指针、指针常量、C++类型转换

一、const应用 1.const关键字,他后面内容的不可修改,一般来说,其修饰的变量不可再进行赋值操作; 2.常量指针 int a = 3; int b = 4; const int* pt = &...
  • zz460833359
  • zz460833359
  • 2015-09-10 22:05:43
  • 930

常指针和指向常量的指针的区别

最近在学习引用,有一些学习心得,记录如下: 1.引用是变量的别名 int a; int b&=a; 要注意引用只有声明,而没有定义,并且引用必须在声明的时候进行初始化,一旦与某个变量关联起来,...
  • zhanghuaichao
  • zhanghuaichao
  • 2016-10-10 17:27:15
  • 2359

C++ - const常量与指针和引用之间的关系

const常量1、const常量必须在定义的时候初始化,且不能修改。 2、const常量的默认类型为int类型。 3、#define是一个预处理器编译指令。该编译指令告诉预处理器,在程序中来查找并...
  • ko_tin
  • ko_tin
  • 2016-11-15 23:36:33
  • 855

引用、常指针、常引用、指针常量、引用常量

引用的本质以及const的位置在语法和作用上的区别
  • isla_forever
  • isla_forever
  • 2017-08-29 14:19:03
  • 270
收藏助手
不良信息举报
您举报文章:《C++ Primer》读书笔记 第二章——变量、引用、指针、常量和类型
举报原因:
原因补充:

(最多只允许输入30个字)