@[TOC](C++基础导航)
本人为刚入门编程语言的新人,对于C++的学习和了解稍显浅显,做这个系列也是记录与学习,若有不妥也请各位大佬可以指出。
该系列的学习分享主要依据C++ Primer 第五版
变量和基本类型(I)
1.基本内置类型(见下图)
*其中float类型有效数字为6-7位(说法不统一,我也不太了解)
*double和 long double类型有效数应为15-16位(说法不统一,我也不太了解)
除去上述类型还有分为有符号和无符号(一般无符号前有unsigned)
繁琐?这是因为C++设计就是尽可能接近硬件。
2.类型转化
bool b = 123; // b为真
int i = b; // i的值为1
i = 3.14; // i的值为3
double pi = i; // pi的值为3.0
unsigned char c = -1; // 假设char占8bit,c的值为255
signed char c2 = 256; // 假设char占8bit,c的值是未定义的
*tip:即使代码通过编译,执行一条未定义的表达式,仍有可能发生错误
*tip:为保证程序可以在多个环境下运行需要程序尽量避免依赖于实现环境
*tip:含有unsigned的表达式类型将都强制转化为无符号数(切勿弄混有符号和无符号)
3.字面值常量
12 3.12 //分别对应整型和浮点型字面值常量
'a' "Hello World!"//分别对应字符字面值和字符串字面值
//区分单引号和双引号!!!
转义序列(可以放到单双引号内充当特殊成分输出,详细见下图)
指定字面值类型(通过添加前后缀改变类型,详细见下图)
*tip:常整型尽量用L来表示,l和1在代码中易混淆
布尔字面值(true,false) nullptr是指针的字面值
4.变量
变量的定义:类型说明符(后面可以紧跟一个或多个变量,其中用','隔开)
-->针对C++一般来说“变量“和”对象“可以互换使用
区分初始化和赋值:对于C++而言初始化和赋值是完全不同的两个操作
初始化:创建对象时赋予其的一个初始值(因而一般在使用时在定义)
赋值:擦除对象当前值用另一个新值来代替
列表初始化:用花括号来初始化变量-->初始化时不用"="
-->用于内置类型时,伴随着数据丢失的风险(浮点强转整型)
默认初始化和不被初始化:
一般定义变量时没有指定初值,则变量将会被默认初始化(初始化类型取决于变量类型)
不被初始化:对于书中我没有完全理解透彻,只是知道会有一种情况变量将不被初始化,当变量不被初始化,则变量将是未定义的,若访问未定义的变量将产生一些安全问题
*tip:对于内置类型的变量建议初始化,这是考虑到安全问题
声明和变量的关系
$ 因为程序有多个文件组成,因而需要有在各个文件中共享代码的方法$ 背景(分离式编译)
声明:规定了变量的名字和类型 -->一般可能会在前面加上extern
定义:在此基础上还会申请储存空间,也可能赋值 -->显式初始化(可以抵消extern从而使其变成定义)
extern int i; //声明i而非定义i 可以多次声明
int j; //声明并定义j 只能一次定义
*note:C++是一种静态类型语言(在编译过程中检查变量类型,过程称之为类型检查),程序越复杂,越有助于发现问题(前提:编译器必须知道每个实体对象的类型)-->这就要求我们在使用某个变量之前必须声明其类型
标识符(由字母、数字和下划线组成)
标识符对大小写字母敏感但对长度没有限制
-->不能连续下划线,也不能以下划线接大写字母开头
变量命名的具体规范 -->!对于命名规范来说,"若有坚持,必将有效"(书中原句)
标识符体现具体意义
变量名一般用小写字母
用户自定义类名一般以大写字母开头
多个单词组成的标识符尽量单词间应有所区分(用大写或者下划线)
*tip:命名不能是C++中的常规关键字和操作符(见下图)
名字作用域
$同一个名字出现在程序的不同位置可能指向的实体是不同的$背景
一般作用域是以花括号为分隔;而且作用域间可以彼此包含嵌套(分为内层和外层作用域)
全局作用域:名字定义在所有花括号之外
块作用域:除了全局作用域,其它以花括号分隔的作用域
向内求索使我倍感清醒和愉悦,只有真正体验过才会明白
这个系列的分享主要还是依据C++ Primer 第五版,个人能力有限难免有很多与原著相同的地方,也请各位大佬指出。
愿与诸君共勉