首页 > 编程语言 >C++ Primer Plus(第6版)笔记

C++ Primer Plus(第6版)笔记

时间:2022-12-17 23:34:25浏览次数:47  
标签:int long char Plus C++ 类型 Primer 整型

目录

C++ Primer Plus Notes

知识点来自《C++ Primer Plus(第6版)中文版》。

并非所有条目都有用,仅供查漏补缺。条目后小号数字为原文在原书中的页码。

第1章 预备知识

1.1.C++简介

  • OOP 强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型。3

第2章 开始学习 C++

2.1.进入 C++

  • C++对大小写敏感。11
  • 类、函数和变量是 C++ 编译器的标准组件,被放置在命名空间 std 中。15
  • endl 确保程序继续运行前刷新输出,而“\n”不能。17

2.2.C++ 语句

  • C/C++可以连续使用赋值运算符(=)。20
  • 在打印之前,cout 必须将整数形式的数字转换为字符串形式。20

2.3.其他 C++ 语句

  • 要对特定对象执行允许的操作,需要给对象发送一条消息。C++提供了两种发送消息的方式:类方法(本质上是函数调用)、重新定义运算符。22

2.4.函数

  • 在使用函数前,C++编译器必须知道函数的参数类型和放回值类型。C++提供这种信息的方式是使用函数原型语句。24
  • 库文件中包含了函数的编译代码,而头文件中则包含了原型。24
  • main 不是关键字。27

第3章 处理数据

  • 内置的 C++类型分两组:基本类型和复合类型。32

3.1.简单变量

  • 对类型名使用 sizeof 运算符时,应将名称放在括号中,但对变量名使用该运算符,括号是可选的。36

  • C++另一种 C 语言没有的初始化语法:

    int wrens(432);
    

    还有另一种初始化方式,这种方式用于数组和结构,但在 C++98 中,也可用于单值变量:

    int hamburgers = {24};
    

    将大括号初始化器用于单值变量的情形还不多,但 C++11 标准使得这种情形更多了。首先,采用这种方式时,可以使用等号,也可以不使用。其次,大括号内可以不包含任何东西,在这种情况下,变量将被初始化为零。最后,这有助于更好地防范类型转换错误:

    int emus{7};
    int rheas = {12};
    int rocs = {};
    int psychics{};
    

    37

  • C++确保了无符号整型在上溢和下溢时会循环取值,但并不保证符号整型发生上溢和下溢时不出错。38

  • 自然长度指的是计算机处理起来效率最高的长度。如果没有非常说服力的理由来选择其他类型,则应使用 int。38

  • 通常,仅当有大型整数数组时,才有必要使用 short38

  • C++使用前一(两)位来标识数字常量基数。如果第一位为 1~9,则基数为 10;如果第一位是 0,第二位为 1~7,则基数为 8;如果前两位为 0x 或 0X,则基数为 16。39

  • iostream 提供控制符 dec、hex 和 oct 分别用于指示 cout 以十进制、十六进制和八进制格式显示整数。

    #include <iostream>
    using namespace std;
    int main()
    {
        int chest = 42;
        int waist = 42;
        int inseam = 42;
    
        cout << "Monsieur cuts a striking figure!" << endl;
        cout << "chest = " << chest << " (decimal for 42)" << endl;
        cout << hex;
        cout << "waist = " << waist << " (hexadecimal for 42)" << endl;
        cout << oct;
        cout << "inseam = " << inseam << " (octal for 42)" << endl;
        return 0;
    }
    
    Monsieur cuts a striking figure!
    chest = 42 (decimal for 42)
    waist = 2a (hexadecimal for 42)
    inseam = 52 (octal for 42)
    
    

    40

  • 程序的声明将特定的整型变量的类型告诉了 C++编译器,除非有理由存储为其他类型(如使用了特殊的后缀来表示特定的类型,或者值太大,不能存储为 int),否则 C++将整型常量存储为 int 类型。

    对于后缀:添加特定后缀会以相应的类型来存储。

    对于长度:对于十进制整数,使用下面几种类型中能存储该数的最小类型来表示:int、long 或 long long;对于不带后缀的十六进制或八进制整数使用下面几种类型中能存储该数的最小类型来表示:int、unsigned int、long、unsigned long、long long 或 unsigned long long。

    40

  • C++实现使用的是主机编码。41

  • 与 int 不同的是,char 在默认情况下既不是没有符号,也不是有符号。是否有符号由 C++实现决定。如果 char 有某种特定的行为对您来说特别重要,则可以显式地将类型设置为 signed char 或 unsigned char。45

  • // TODO 17/12/2022 meyok:理解 wchar_t,第 45 页。

  • // TODO 17/12/2022 meyok:理解 char16_t 和 char32_t,第 45 页。

3.2.const 限定符

  • const 与 #define 相比,有以下优点:

    1. 能够明确指定类型。
    2. 可以使用 C++的作用域规则将定义限制在特定的函数或文件中。
    3. 可以将 const 用于更复杂的类型。

    46

  • C 与 C++中 const 的主要区别:

    1. 作用域规则。// TODO 17/12/2022 meyok
    2. 在 C++中可以使用 const 值来声明数组长度。

    47

3.3.浮点数

  • C 和 C++对于有效位数的要求是,float 至少 32 位,double 至少 48 位,且不少于 float,long double 至少和 double 一样多。通常,float 为 32 位,double 为 64 位,long double 为 80、96 或128 位。48
  • 在默认情况下,像 8.24 和 2.4E8 这样的浮点常量都属于 double 类型。如果希望常量为 float 类型,请使用 f 或 F 后缀。对于 long double 类型,可使用 l 或 L 后缀。49

3.4.C++运算符

  • 对于运算的符号问题,满足如下规则:(a/b)*b + a%b = a50

  • 将浮点数转化为整型时,C++采取截取而不是四舍五入。54

  • C++11 使用的列表初始化不允许缩窄。54

  • 对于表达式中的类型转换:

    自动转换:在计算表达式时,可能会有整型提升,以提升运算速度。

    运算时出现浮点数,转换为有效位更大的类型,否则都为整数做整型提升。

    整型级别:对于有符号整数从高到低为 long long、long、int、short、signed char。无符号整型与其相同。char、unsigned char 和 signed char 级别相同。bool 级别最低。wchat_t、char16_t、char32_t 的级别与其底层类型相同。

    54-55

  • 强制类型转换不会改变变量本身,而是创建一个新的、指定类型的值。55

  • C++强制类型转换推荐写法:

    typeName (value)
    

    目的要让强制类型转换就像是函数调用。

    55

标签:int,long,char,Plus,C++,类型,Primer,整型
From: https://www.cnblogs.com/meyok/p/16989840.html

相关文章

  • C++学习---cstdio的源码学习分析07-刷新文件流函数fflush
    cstdio中的文件访问函数stdio.h中定义了一系列文件访问函数(fopen,fclose,fflush,freopen,setbuf,setvbuf),接下来我们一起来分析一下fflush对应的源码实现。fopen:打开文件fclose:......
  • C/C++校园超市商品信息管理系统
    C/C++校园超市商品信息管理系统实验14校园超市商品信息管理系统商品包含以下信息项:商品编号、商品名称、商品厂家名称、商品类型、商品销售价格商品进货价格、商品生产......
  • C++ OTHER
    C++中变量名称只能【_字母】开头,后面可以用【_字母数字】Ctrl+kCtrl+C所选行被注释int数字char字符string字符串C++固定变量......
  • C/C++停车场管理系统
    C/C++停车场管理系统6.11停车场管理系统[问题详述]停车场有30个车位。每天早上6:00开放,晚上12:00关闭,关闭后禁止车辆出入。停车每小时收费PH(PH=6)元,每天停车......
  • c/c++ 2d矢量库
    CairoCairoisa2Dgraphicslibrarywithsupportformultipleoutputdevices.Currentlysupported outputtargets includetheXWindowSystem(viaboth Xlib......
  • C/C++数据结构课程设计[长春理工大学计算机科学技术学院2022秋季学期]
    C/C++数据结构课程设计[长春理工大学计算机科学技术学院2022秋季学期]长春理工大学计算机科学技术学院2022秋季学期数据结构课程设计一、目的:巩固数据结构与算法课内......
  • 链接--C++相关问题
    C++的一些语言特性使之必须和编译器链接器共同支持才能工作。重复代码消除全局构造和析构重复代码消除:C++编译器在很多时候会产生重复的代码,比如模板(Templates)、......
  • 基于Mybatis-Plus实现Geometry字段在PostGis空间数据库中的使用
    背景在OGC标准中,通常空间字段是由Geometry类型来表示。而一般编程语言中是没有这种数据类型的。以java为例,怎么操作这些数据,满足业务需求呢?跟着本文一起来学习吧。今天介绍......
  • C++编译错误:ISO C++ forbids initialization of member `x'
     在C-Free中编译简单的C++代码,发现报以上错误:ISOC++forbidsinitializationofmember`x'(ISOC++禁止初始化成员变量‘x’),经查阅资料:c++类基于C语言的结构体(struc......
  • log4cplus最新介绍、详细编译过程及使用(最全面)
    log4cplus是C++编写的开源的日志系统很有名也很强大,但网上大多的资料都是讲如何配置使用。关于编译过程一笔带过,尤其是windows下的编译过程少之又少。得先有编译这个提才有......