《C++PrimerPlus 6th Edition》第3章 处理数据 要点记录

    技术2023-06-02  90

    《C++PrimerPlus 6th Edition》第3章 处理数据 要点记录

    要点1. 简单数据类型2. C++命名规则3. 初始化方式4. 类型转换自动转换强制转换 5. 其余一些注意点 习题

    要点

    1. 简单数据类型

    类型具体类型说明整型bool char、signed char、unsigned char (至少16位) short、unsigned short (至少与short一样长)int、unsigned int (至少32位,且至少与int一样长) long 、unsigned long (C++11特性) long long、unsigned long long wchar_t、char16_t(无符号16位)、char32_t(无符号32位)①C++没有提供自动防止超出整型限制的功能,可以使用头文件climits来确定限制情况,例如INT_MAX(int最大值),CHAR_BIT(字符) ② 使用sizeof时要加括号(对于变量名可无括号) ③wchar_t、char16_t、char32_t有底层类型,其选择取决于实现。 实型float、double、long double ①float至少32位②double至少48位且不少于float③long double至少和double一样多④float至少确保6个有效数位,double13个⑤关于浮点数的限制可在头文件cfloat中找到

    2. C++命名规则

    名称中只能使用字母字符、数字和下划线(_)名称的第一个不能为数字区分大小写不能选择C++关键字作名称C++名称长度无限制,但有些平台有长度限制以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用,以一个下划线开头的名称被保留给实现,用作全局标识符 (使用如__fools或_time_stop或_Donut这样的名称,编译不会出问题,但是会导致行为的不稳定)

    3. 初始化方式

    C-Style:int x = 4396;C++ Style:int x(7777);C++11:int x = {2333}; or int x{2333}; or int x={};//0 or int x{}; //0

    4. 类型转换

    自动转换

    整型提升:计算表达式时,C++将bool、char、unsigned char、signed char、short值转换为intC++11算术表达式中用到的校验表: 如果有一个操作数的类型为long double,则将另一个操作数转换为long double否则,如果有一个为double,另一个转为double否则,有一个为float,则另一个转为float否则,操作数都为整型,因此执行整型提升在这种情况下,如果两操作数都是有符号的或都是无符号的,且其中一个操作数的级别比另一个低,则转换为高级别类型(高级别范围更大)如果一个操作数有符号,另一个无符号,且无符号操作数的级别比有符号的高,则将有符号操作数转为无符号操作数所属类型否则,如果有符号类型可表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属类型否则,将两个操作数都转换为有符号操作数其类型对应的无符号版本

    强制转换

    C-Style:(typename) value; C++ Style:typename(value); or static_cast<typename>(value);etc.

    5. 其余一些注意点

    如果知道变量可能表示的整数值大于16位整数的最大可能值,则使用long。即使系统上int为32位也应这样做。这样,将程序移植到16位系统时,就不会突然无法正常工作(因为此时的int变量存储的值如果超过32767=2^16-1,那么就会上溢)如果要存储的值超过20亿( 2 × 1 0 9 2 \times 10^{9} 2×109),可使用long long通常仅当有大型整型数组时,才有必要使用short如果节省内存很重要,则应使用short而非int,即使它们的长度是一样的。例如,如果将程序从int为16位的系统移到32位的系统时,则用于存储int数组的内存量将加倍,但short数组不受影响控制符 cout<<std::hex; cout<<std::oct; cout<<std::dec;它们不会在屏幕上有显示,只是改变显示整数的方式。另外,要慎用它们作为变量名!!!(取决于是否用了编译指令using来使用名称空间std)成员函数cout.put();可打印字符通用字符名的编码与转义序列类似,可以以\u(8个十六进制位)或\U(16个十六进制位)开头char在默认情况下既不是没有符号,也不是有符号。是否有符号取决于C++实现,必要时显式将类型设置为signed char或unsigned charcin与cout将输入和输出看作是char流C++中const比#define要好,原因:①能明确指定类型;②可以使用C++的作用域规则将定义限制在函数或文件中;③可以将const用于更复杂的类型浮点常量在默认情况下为double类型C++auto声明(自动推断类型)在处理复杂类型时会带来便利,与此类似的有C#中的varchar grade = 65;与char grade = 'A';并不完全等价,对于不同编码的系统,第二句始终是代表A,但第一句仅仅在编码为ASCII码时是表示字符A。

    习题

    习题参考代码见我的github(上传后会把链接打上)

    欢迎各位大佬们于评论区进行批评指正~

    下一篇文章:《C++PrimerPlus 6th Edition》第4章 复合类型 要点记录

    Processed: 0.010, SQL: 9