C++笔记121023
开篇序言
为什么要重新学习C++呢。因为不想留下遗憾。想把过去没有弄懂的,学得半懂不懂的东西彻底弄明白。所以有此笔记。
这是C++系列的第一篇,主要谈除掉class以外的类型,通常称为基本类型。C++ Prime Part 1 的序言写得很到位:
基本上所有的语言都具有下列特征:
1、内置数据类型,如int,char等等
2、表达式和语句:表达式和语句用于操纵上述类型的值
3、变量:程序员可以使用变量对所使用的对象命名
4、控制结构:if/while/for,这些结构可以使语言称为图灵完备的
5、函数:可以把行为抽象为可调用的计算单元
大多数现代程序设计语言都采用两种方式扩充上述基本特征集:允许程序员自定义数据类型扩展该语言;提供一组库例程,定义非内置的实用函数和数据类型。
本节主要讨论基本类型(不涉及类)
基本内置类型主要有算术类型和void,而算术类型为:
bool 1byte
char 1byte
wchar_t 2byte
short 2byte
int 1word
long 1word
float 1word
double 2word
long double 3~4word
前5种类型称为整形,后两种称为浮点型,除bool外的整形可以加限定前缀signed/unsigned,代表是否有符号。通常在程序中用得最多的是bool/char/int/double这四种基本内置类型,它们可以满足绝大部分运算需求。
字面值常量,可以用20,024,0x14表示数字20,仅仅是进制不同(dec/oct/hex),如果要表示long,则在常量后面加后缀L,表示unsigned则加u
浮点字面值常量默认为double,加F表示float,同样加L代表扩展精度,如1.23e10L
bool型字面值只有两个:true/false
char型字面值常量如'a',而L'a'表示宽字符wchar_t型,char型字面值常量还有一些转义字符,常用的如'\t','\n'等,代表tab符和换行,反斜线主要用于打印特殊意义的字符,如'\?'和'\\'。另外\ooo(ooo代表三位8进制数字是相应的ASCII码),亦可以用16进制\xddd来表示。
字面值常量里有一个不是基本内置类型表示的,即字符串常量"Hello World!",注意"A"与'A'不同,因为前者按照C的兼容法则,会在字符串字面值后面自动添加一个空字符'\0'
变量
命名规则:下划线或字母开头,只能由下划线字母或数字组成。另外不能使用关键字,统一命名习惯,如小写字母开头,分隔单词大写。注意赋值语句中区分左值和右值。
定义:如char a; int b(0); double c = 3.14; 都是定义。定义最好初始化。初始化可以是直接初始化也可以是复制初始化,对内置类型来说几乎无区别。初始化不是赋值
定义是声明的一种,声明加extern关键字,声明不是定义。如果在函数体外定义未初始化,则内置类型初始化为0.函数体内是undefined行为。
三种基本的作用域是:全局作用域、局部作用域和语句作用域。最后一种形如for(int i = 0; i != 10; ++i);变量的定义在子作用域具有屏蔽效应。
此外还有class scope和namespace scope两种高级作用域。
const限定符可以使定义后不能被修改,因此必须初始化
引用(&)是变量的别名定义,因此必须用初始化
非const引用必须用非const变量初始化,const引用可以用所有的变量甚至字面值常量初始化。
typedef是类型的别名,形如typedef int score;这样score test;等价于int test;
typedef的作用是:隐藏实现,强调目的;简化复杂类型定义,使其易理解;允许一种类型用于多个目的,让目的明确
注意上述关键字可以用在class上。
枚举类型:enum modes{on,off,undefined};
则可有如下定义:modes myMode = on;
注意,虽然枚举类型和整形数据绑定,但是modes myMode = 0;的定义是不允许的。
浙公网安备 33010602011771号