C++ Prime Plus 笔记

2020/09/12 P1-P36
C++源文件必须使用正确后缀,这种信息将告知编译器,如果UNIX编译器显示“bad magic number”则表明后缀不正确
UNXI下编译多个源码文件时,编译器不会删除目标代码文件(.o)
C++对大小写敏感
C++使用分号作为终止符(terminator),是语句的结束标记,是语句的组成部分,不能省略
形参agrument,实参parameter
在C语言中,省略返回类型相当于说函数的类型为int,C++逐步淘汰了这种用法
在C++中,让括号空着与在括号中使用void等效
如果编译器达到main()函数末尾时没有遇到返回语句,则认为main()函数以return 0结尾
using std::cout
运算符重载,“<<”表示插入、左移
endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而“\n”不能保证
一行代码中不可分割的元素叫做标记token
通常必须用空格、制表符或回车将两个标记分开,空格、制表符、回车统称为空白
与函数名称相关的圆括号周围没有空白
库文件中包含了函数的编译代码,而头文件中则包含了原型
编译器倾向于给函数名添加下划线前缀——提示它们对程序具有最后的发言权P28
可以把main用作变量名(在一些很神秘的以致于无法在这里介绍的情况中,将main用作变量会引发错误P31)
在不使用cout对象进行输出的函数中,可以将cout用作变量名,但不能在同一个函数中同时将cout用作对象名和变量名
将using namespace std;放在特定的函数定义中,让该函数能够使用名称空间std中的所有元素

2020/09/14 P37-P42
以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用,以一个下划线开头的名称被保留给实现,用作全局标识符
C++对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制;ANSI C只保证名称中前63个字符有意义
术语宽度(width)用于描述存储整数时使用的内存量
short至少16位,int至少与short一样长,long至少32位且至少与int一样长,long long至少64位且至少与long一样长
C++字节由至少能够容纳实现的基本字符集的相邻位组成,即可能取值的数目必须等于或超过字符数目(ASCII为8,Unicode使用16位、32位)
术语八位组(octet)表示8位字节
short最大值SHRT_MAX,long最大值LONG_MAX,long long最大值LLONG_MAX
对类型名使用sizeof运算符时,应将名称放在括号中;但对变量名使用该运算符,括号是可选的
#define编译指令的工作方式与文本编辑器或字处理器中的全局搜索并替换命令相似
int wrens(432); //alternative C++ syntax set wrens to 432

2020/09/15 P43-P49
使用大括号初始化有助于更好地防范类型转换错误
unsigned a; <==> unsigned int a;
C++并不保证符号整型超越限制(上溢和下溢)时不出错
如果整型字面值第一位为19,则基数为10;如果第一位为0,第二位为17,则基数为8;如果前两位为0x或0X,则基数为16
cout << hex; cout << oct;
整数后面的l或L后缀表示该整数为long常量,u或U后缀表示unsigned int常量
对于不带后缀的十六进制或八进制整数,将使用下面几种类型中能够存储该数的最小类型来表示;int、unsigned int long、unsigned long、long long、unsigned long long
在将40000表示为long的系统中,十六进制数0x9C40(十进制等于40000)将被表示为unsigned int,这是因为十六进制常用来表示内存地址,而内存地址是无符号的
要通过对象使用成员函数,必须用句点(成员运算符)将对象名和函数名称连接起来

2020/10/06 P50-P51
对于不能直接通过键盘输入到程序中的字符,C++提供了一种特殊的表示方法:转义序列
将转义序列作为字符常量时用单引号括起,放在字符串中时不使用单引号
可以基于字符的八进制和十六进制编码使用转义序列

2020/12/01 P52-P57
unsigned char 0-255, signed char -128-127
wchar_t宽字符类型,本质为一整数类型,可以表示系统使用的最大扩展字符集,这种类型与另一种整形(底层underlying类型)的长度和符号属性相同,对底层的选择取决于实现
cin、cout处理char流,不适于处理wchar_t,iostream中提供了wcin、wcout
前缀L指示宽字符常量和宽字符串
c++11新增的类型char16_t、char32_t
均为无符号,前缀u / U表示char16_t / char32_t字符常量和字符串常量
这两种类型也具有底层类型
字面逻辑值可以提升转换为int型,任何数字值或指针值可以被隐式转换为bool
const限定符,变量首字母大写/全部大写/以k开头
const相比define的优点:指定类型、可以使用C++的作用域将定义限制在特定的函数或文件中、可以将const用于更复杂的类型
float基准值、缩放因子
float输入提供了使用欧洲方法(逗号作为小数点)的机制
C++对有效位数的要求为float至少为32位,double至少为48位,且不少于float,long double至少和double一样,通常float32,double64,long double为80、96或128
三种类型的指数范围至少是-37到37
实际在Borland C++ Builder中,float.h文件中float为-37到38,见P56
cout删除结尾的0,打印6位小数

2020/12/03 P58-P69
浮点常量默认double,用f、F设置float,l、L设置long double
整型和浮点型统称算术类型
若%运算操作数包含负数,则按照(a/b)*b + a % b = a确定符号
C++只保证浮点数的6位有效位
两个运算符相同时,考虑结合性(associativity)
优先级和结合性只有在应用于同一个操作数时才生效,如20 * 5 + 24 * 6,两个乘法的运算顺序仅由具体实现决定,此例中顺序不影响结果,也存在影响结果的例子
运算符重载(operator overloading):使用相同的符号进行多种操作
C++自动执行类型转换的情形:不同类型间赋值、表达式中含不同类型的值、函数传参数
将取值范围大的类型转换为取值范围小的类型时,结果可能不确定,不同实现可能不同
C++11将使用大括号的初始化称为列表初始化(list-initialization),列表初始化不允许缩窄(narrowing,即变量的类型可能无法表示所赋的值)
上述列表使用变量时,编译器根据变量的类型决定是否缩窄,而不是具体值
表达式中的转换分为:整型提升(出现即自动转换,bool、char、uchar、schar、short)
若short比int短,则ushort转换为int,否则转换为uint,确保提升时不损失数据
编译器通过校验表来确定在算数表达式中执行的转换,C++11的校验表见P64

2020/12/15 P70-P88
数组元素数目不能是变量,编译器不检查数组下标的有效性
sizeof可以不加括号
C++11列表初始化可省略等号、大括号为空、禁止缩窄转换
字符串常量/字符串字面值(string literal),隐式地包括结尾的空字符
任何两个由空白(空格制表符换行符)分隔的字符串常量自动拼接为一个
getline()丢弃换行符,gets()包含换行符
cin.get().get(),cin.get()返回一个cin对象
当get()读取空行后将设置失效位(failbit)阻断输入,使用cin.clear()恢复
string类具有自动调整大小的功能
strncat()、strncpy()接受指出目标数组最大允许长度的第三个参数
getline(cin, str),istream没有处理string的类,cin >> str的操作使用string类的一个友元函数
wchar_t、char16_t、char32_t的字符串字面值使用前缀L、u、U
C++11新增一种类型原始(raw)字符串,用前缀R声明,使用”(和)”作为界符,转义序列显示为其原本字符
原始字符串语法允许在表示字符串开头的”和(之间添加其他字符

你可能感兴趣的:(笔记收录,c++)