《C++ Primer》(第5版)学习笔记(一)预备知识

/* Note_book_C++Primer */

预备知识:

第一部分:虚拟机

一、虚拟网络名称:VMnet8

二、Shell 的查看网络 IP 命令(二选一即可):
1. ifconfig
2. ip addr

第二部分:Xshell6 的使用方法

一、快捷键
1. Win + ;
    跳出一个表情框,鼠标点击选中其中的一个表情图片输入到当前光标位置。
2. Alt + Enter
    全屏 —— 窗口布满屏幕。这是个开关键。
3. Alt + O
    添加 terminal 窗口。
4. Ctrl + Tab
    当开辟了多个 terminal 窗口时,用该快捷键设置当前的活动窗口:在这些窗口之间从左向右顺次跳移,以
设置需要的活动窗口。
5. Ctrl + Shift + Tab
    与 Ctrl + Tab 的作用相同,区别在于设置活动窗口的顺序为从右向左跳移。
6. Shift + Tab
    在当前 terminal 窗口和前一个 terminal 窗口之间交互跳移。

二、移动 terminal 屏幕窗口的方法 —— 使用鼠标拖动的方式
    当打开了超过一个 terminal 窗口时,如果想要将其中某个 terminal 窗口移动到另一个 terminal 窗口的
旁边,只要鼠标左键选中要移动的 terminal 窗口,并按住鼠标左键不放,再拖动该 terminal 窗口到需要到达
的目标位置即可。这样就无需关闭 terminal 窗口后,再重新打开一个新的 terminal 窗口。

第三部分:Linux 的用法

一、在 Linux 的 shell 中显示 ASCII 码的方法(在 shell 命令行输入下面的命令):
man 7 ascii
    该命令将显示 ASCII 码的 man 页。

二、一次性创建多级目录的命令:
mkdir -p <dir_1-1>/<dir_1-2>/.../<dir_1-N> <dir_2-1>/<dir_2-2>/.../<dir_2-N>  ...

三、一次性复制多级目录内容到另一目录中(目录 dir1 中含有子目录):
cp -r <dir1> <dir2>
    如果 dir2 不存在,则会自动创建它后,再将 dir1 中的内容(不含 dir1 本身)复制到 dir2 目录中。

四、一次性输出显示指定目录及其下级目录的全部内容:
ls -R <dir>
    如果目录 dir 有下级子目录,则会显示 dir 目录及其子目录的内容(如果含多级,则各级均显示)。

第四部分 Vim 的用法

一、Vim 编辑器的使用(摘录自王桂林老师的《零基础 C 语言入门》,其中标签编号是所引录的该书章节号)
(以下命令中的前置字符 “:”,是 vi 编辑器的 ex 命令类型所特有的命令引导字符,不可以缺省):

2.4.1 vi 编辑器中有三种状态模式:

    (进入)vi filename --→  命 令 模 式  --→ :wq(退出)
                     i/a/o ↙↗ ESC 键  : ↘↖ 回车键
                       插入模式       编辑模式

2.4.2 vi 编辑器的启动与退出
    命 令            说 明
      vi        直接进入编辑环境
  vi myfile        进入编辑环境并打开(新建)文件
      :q        退出 vi 编辑环境

2.4.3 文件操作
    命 令            说 明
:w                    保存 vi 编辑器中已打开文件所做的修改
:w myfile            将 vi 编辑器中的内容另存为指定文件名(以 myfile 指代)
:w! myfile            将编辑缓冲区中的数据覆盖一个已存在的文件(以 myfile 指代)
:n w! myfile        (若原文件 myfile 已打开,需要先关闭后再执行本命令)1. 若指定行号 n 或指定
:x,y w! myfile        起始行号 x 和截止行号 y(含),则使用指定行号范围内的数据执行覆盖操作。如果
                    myfile 文件不存在,则创建它,然后执行复制操作,若已存在,则直接执行覆盖操作。
                    2. 命令字符“w”与“!”之间及“!”与目标文件名 myfile 之间允许不用空格分隔,因为
                    vi 能分辨命令名各组成要素的界线,但建议添加空格以示区别。
:w >> myfile        将编辑缓冲区中的数据追加到指定文件的末尾
:n w >> myfile        1. 若指定行号 n 或指定起始行号 x 和截止行号 y(含),则使用指定行号范围内的
:x,y w >> myfile    数据执行追加操作。若 myfile 文件不存在,则显示警告信息 Can't open file for 
                    writing,无法保存,若已存在,则执行追加操作。2. 目标文件名称 myfile 与“>>”
                    之间以及命令字符“w”与“>>”之间都允许不用空格分隔,因为 vi 能分辨命令名各组成
                    要素之间的界线,但建议添加空格以示区别。
:wq                    对 vi 编辑器中的文件进行保存并退出 vi 编辑器
:q!                    放弃对文件内容的修改,并退出 vi 编辑器
:e myfile            1. 正在编辑文件时允许不退出 vi 而切换到另一个文件。这时编辑缓冲区原有内容将
                    丢失,所以要先用“:w”命令将已存在的数据保存到原文件。若已保存原数据,则编辑
                    指定的文件,若未保存,则显示警告信息而无法执行本命令的操作。若目标文件不存
                    在,则创建并打开它。2. 若文件名以非字母字符开头,则字符“e”跟文件名之间允许
                    不用空格分隔,因为 vi 能分辨命令字符各组成要素之间的界线;若文件名以字母字
                    符开头,则命令名字符“e”和文件名之间必须以空格分隔 —— 否则 vi 不认为字符 e 
                    是命令名的组成部分。
:e!                    放弃原来编辑缓冲区内的数据,重新编辑当前文件
:e! myfile            1. 放弃原编辑缓冲区内数据,编辑指定的文件 myfile。若指定切换到的目标文件不
                    存在,则创建它,并执行命令操作。2. 命令名称字符“e”与 “!”之间及“!”与文件名称
                    之间都允许不用空格分隔而连续键入,因为 vi 能分辨命令字符的各组成要素之间的
                    界线。

2.4.4 光标移动操作
    在 vi 中,句子是以句号、逗号、问号或感叹号结尾的一个字符串,后面至少跟两个空格或一个新行字符;
    vi 所识别的句子必须保证以至少两个空格或一个新行字符结束,而单词之间以一个空格分隔,这样才能使 
vi 分辨出光标移动所跨越的是句子还是单词。
    命令类型    命令操作        说 明
  行内移动光标        h        向左移动光标一个字符
                    l        向右移动光标一个字符
                    k        向上移动光标一个字符
                    j        向下移动光标一个字符
                    ^        将光标快速跳转到本行的行首字符
                0(数字 0)    将光标快速跳转到本行的行首字符(同上)
                    $        将光标快速跳转到本行的行尾字符
                    w        向右移动光标一个单词(词首)
                    W        向右移动光标一个单词(词首)(含空白符和标点符)
                    e        向右移动光标一个单词(词尾)
                    E        向右移动光标一个单词(词尾)(含空白符和标点符)
                    b        向左移动光标一个单词(词首)
                    B        向左移动光标一个单词(词首)(含空白符和标点符)
  跨行移动光标        (        向左移动光标到上一个句子的第一个非空白字符
                    )        向右移动光标到下一个句子的第一个非空白字符
                    {        向左移动光标到上一个段落的第一个非空白字符
                    }        向右移动光标到下一个段落的第一个非空白字符
                    -        向上移动光标到上一行的开头第一个非空白字符处
                    +        向下移动光标到下一行的开头第一个非空白字符处
                    H        移动光标到屏幕的顶部第一行行首
                    M        移动光标到屏幕的中间一行行首
                    L        移动光标到屏幕的最后一行行首
    返 回    ``(两个反引号)    将光标返回到光标前一位置所在处
            ''(两个单引号)    将光标返回到光标前一位置所在行开头
    翻 页        Ctrl + f    向下翻整页
                Ctrl + b    向上翻整页
                Ctrl + u    向上翻半页
                Ctrl + d    向下翻半页
  文件内跳转    :set nu        在编辑器中显示行号
                :set nonu    取消编辑器中的行号显示
                1G(gg)        跳转到文件的首行
                    G        跳转到文件的末尾行
                   #G        跳转到文件中的第 # 行(# 字符指代一个数字)
                    #        向下跳至光标所在行下数 # 行(# 字符指代一个数字)

2.4.5 编辑操作

1. 一般编辑操作
命令类型        命令操作        说 明
进入输入模式        i      在当前光标处进入插入状态
                    I      在当前光标所在行行首进入插入状态
                    a      在当前光标后进入插入状态
                    A      在当前光标所在行行尾进入插入状态
                o(小写) 在当前行的下面插入新行,光标移动到新行的行首,进入插入状态
                O(大写) 在当前行的上面插入新行,光标移动到新行的 行首,进入插入状态
                  c(n)w      删除当前光标到所在单词尾部的字符,并进入插入状态
                   c$      删除当前光标到行尾的字符,并进入插入状态
                   c^      删除当前光标之前(不含光标所在字符)到行首的字符,并进入插入状态
删除操作            x      删除光标处的单个字符
                  (n)dd      删除光标所在向下 n 行
                :3,5 d      删除从第 3 行到第 5 行的内容
                   dw      删除当前字符到单词尾(包括空格)的所有字符
                   de      删除当前字符到单词尾(不包括单词尾部的空格)的所有字符
                   d$      删除当前字符到行尾的所有字符
                   d^      删除当前字符到行首的所有字符
                J(大写) 删除光标所在行行尾的换行符,相当于合并当前行和下一行的内容
 拷贝和粘贴  (n)yy(dd)      复制(yy 为复制,dd 为剪切)当前行整行的内容到 vi 缓冲区
           :x,[y] co(m) z 复制(co 为复制,m 为剪切)x~y行,到第 z 行处。另外:“.”(点号)代表当
                          前行,$(美元符号)代表编辑缓冲区中的最后一行;0(数字零)代表编辑缓冲
                          区的开头。
                p(小写) 读取 vi 缓冲区的内容,并粘贴到光标当前位置(不覆盖文件已有内容)
                P(大写) 读取 vi 缓冲区的内容,并粘贴到当前光标所在行的下一行(文件原已有内容下
                          移相应行数,不会被覆盖)
            :[line]r file 将其他文件中的数据插入到当前编辑文件中。line 是当前编辑文件的行号,file
                          是将要插入到编辑文件的“其他文件”的文件名。命令字符“r”的含义是“read”,意
                          为读入数据。可用数字“0”作行号,表示编辑缓冲区的开头;用 $ 表示编辑缓冲
                          区的末尾;省略行号则把新数据插入到光标所在行的次行。文件 file 的名称若
                          以字母字符开头,则必须在命令名称 r 与文件名之间以空格分隔,否则 vi 无法
                          分辨命令名和文件名的界线;若文件 file 的名称以数字或下划线等非字母字符
                          开头,由于 vi 能分辨命令名称 r 与文件名的界线,所以可不用空格将两者分隔
                          而连续键入命令名 r 和文件名,但建议用空格分隔以利于理解,且更美观。
 撤销与恢复        u(小写) 取消最近一次操作并恢复操作结果(可以多次使用 u 命令)
                U(大写) 取消对当前整行进行的所有操作
                Ctrl + r  对使用 u 命令撤销的操作进行恢复

2. 在 Vi 编辑器内使用 shell 命令
    命令操作                        说 明
   :!command       “!”是命令字符,其后的 command 指代一条 shell 命令。只能键入(使用)一条 shell
                   命令(这其实是暂停 vi 后返回启动该 vi 程序的那个 shell 中),按任意键返回 vi。
      :!!           第 1 个“!”是命令字符,第 2 个“!”,代表一条上一次执行的 shell 命令,按任意键返回
                   vi。
      :sh           启动一个新的默认 shell 的副本。若默认 shell 是 bash(或 csh),则启动的也是 
                   bash(或 csh),在该 shell 中可键入任意 shell 命令,直到按 Ctrl+D 键或键入 exit
                   命令退出该 shell 后,返回 vi。命令“:!sh”与“:sh”是不同的,“:!sh”启动的是一个新的
                   名为 sh 的 shell(sh 是最早开发的 shell 之一)。
:[line]r !command  把在 vi 编辑器内使用的 command 这一个 shell 命令产生的输出,插入到指定行号 line
                   所在行的下一行。若省略行号,则插入到光标所在行的下一行(可以使用数字“0”和字符 $
                   所代表的行号)。本命令是“:[line]r file”和“:!command”两个命令的组合使用。
  n!! command       在 n 个行上执行 shell 命令 command。将指定行数据发送给 shell 程序处理,若数据对
                   shell 的执行无意义,则忽略它,然后删除编辑缓冲区中指定行数据,并将 shell 命令输
                   出内容插入到原光标所在行下面。n 是要处理的行数,指光标所在行(含)往下数共计需
                   处理的 n 行;省略 n 则仅处理光标所在行数据;!!(两个感叹号)是命令名称,command
                   是处理数据所使用的 shell 命令;键入第二个 ! 字符后光标就移到命令行,并回显所有
                   输入,在按回车键前可使用删除键和键盘方向键修改命令行字符。
  !move command       在指定行范围内执行程序 command。该过程与 !! 命令相同,只是在指定行的范围时所使
                   用的方法不同。move 代表移动光标命令(在实际输入时以具体的移动光标命令取代),它
                   与 command 之间的空格是语法分隔符,是为分辨命令要素的不同部分而添加,实际输入命
                   令字符时不需要键入;字符 !(感叹号)是命令名称,command 是处理数据所用的 shell
                   命令。键入移动光标命令后光标就移到命令行并回显所有输入,在按回车键前可使用删除
                   键和键盘方向键修改命令行字符。

2.4.6 查找与替换操作

    搜索命令匹配项时,忽略大小写、显示部分匹配、高亮显示的设置和取消:

1. 命令字符及其功能:
ic(ignorecase)        查找时忽略字母大小写
noic(noignorecase)    查找时区分字母大小写
is(incsearch)            查找短语时显示短语中的部分匹配
nois(noincsearch)        查找短语时显示短语的全部匹配
hls(hlsearch)            高亮显示所有的匹配短语
nohls(nohlsearch)        取消高亮显示匹配短语

2. 输入命令:

      缩 写                完 整   
(1) :set ic     或 :set ignorecase
(2) :set noic   或 :set noignorecase
(3) :set is     或 :set incserach
(4) :set nois   或 :set noincserach
(5) :set hls    或 :set hlsearch
(6) :set no hls 或 :set nohlsearch

    命令类型    命令操作    说 明
      查 找          /word        从上而下在文件中查找字符串“word”
                  ?word        从下而上在文件中查找字符串“word”
                    n        定位下一个匹配的被查找字符串
                    N        定位上一个匹配的被查找字符串
      替 换      :s/old/new    将当前行中查找到的第一个字符“old”串替换为“new”
              :s/old/new/g    将当前行中查找到的所有字符串“old”替换为“new”
            :#,#s/old/new/g    在行号“#,#”范围内替换所有的字符串“old”为“new”(# 字符指代一个数字)
            :%s/old/new/g    在整个文件范围内替换所有的字符串“old”为“new”

2.4.7 学习工具 vimtutor
    在 shell 命令行中输入 vimtutor,默认是英文版的;输入 vimtutor -g zh 则使用中文版。

2.4.8 vim 最简易配置
    在用户当前的家目录中,输入“vim ~/.vimrc”,文件 .vimrc 是一个隐藏文件,如果没有该文件则创建它;
在该文件中保存着 vim 的常用配置。以下是该文件的一个内容范例:
"==============================================================
"              Sample vi/Vim initiallization file
"==============================================================
"
set    nu                      " 代码显示行号
syntax on                      " 关键词高亮显示
set    cindent                 " C 语法自动缩进
set    autoindent              " 新行自动缩进
set    shiftwidth=4            " 缩进宽度 4
set    tabstop=4               " tab 键宽度 4
set    softtabstop=4           " 制表符宽度 4
set    nobackup                " 不备份
set    nohls                   " 取消高亮显示搜索项

" End
    以上为 .vimrc 文件的一种可能的范例内容。

附录:vim 常用快捷键

1. 变量名补齐功能:Ctrl+P
   在当前打开的 c 源文件中,输入某个变量的首字符,按下该快捷键,会弹出以该字符开头的所有名称列表,
即可在该列表中选择所需要的名称。该功能与 shell 的 Tab 键的命令名称(文件名)补齐作用相似。

2. 在已打开的文件中查看命令或选项功能信息:Shift+K
   将光标移动到需要查看的命令或选项名称中,按该快捷键,就在当前屏幕弹出该命令或选项相关的 man 文件
信息,由此可以了解其功能和作用等信息。

3. 查看当前正在编辑的文件的信息:Ctrl+G

4. 实现文本对齐的快捷键方法
    按 ESC 键进行命令行模式,按 v 键进入可视化模式,再通过光标移动按键选中要执行对齐操作的行(例如
按下 j 键以选择下一行),最后按 = 键即可实现对齐操作。

第五部分 编译命令 g++/gcc 的用法

    g++/gcc 有多个命令选项来控制程序检查的彻底程度。使用这些选项可以有效地帮助找出程序中潜在的故障
区域。下面是一些比较常用的选项:
(1) -Wall
    使编译器在检测到可能的错误时生成警告消息。(-W 后面可以加上具体的警告信息代码,-Wall 表示“所有
的 -W 选项”。)为了获得最好的效果,该选项应与 -O 选项结合使用。
(2) -W
    除了 -Wall 生成的警告消息外,还可以添加需要针对具体情况的额外警告消息。
(3) -pedantic
    根据 C++/C 标准的要求生成警告消息。这样可以避免在程序中使用非标准特性。
(4) -ansi
    禁用 g++/gcc 的非标准 C++/C 特性,并启用一些不太常用的标准特性。
(5) -std=c++11(或 -std=c99 又或 -std=89)
    指明使用 C++11 版本(-std=c99 则为 C99 版本,而 -std=89 则为 C89 版本)编译器来检查程序。
(6) -E
    与 -o 选项结合使用,以生成 .i 文件(经预处理后的 C++/C 源代码文件)。该选项后一定是 .cpp(.c)
源文件。
(7) -S
    输出经过编译器编译后生成的汇编语言文件。-S 选项所操作的对象文件,是经过预处理器处理后生成的预
处理文件,而不是 .cpp(.c)源文件 —— 即编译预处理文件(而不是编译 .cpp 或 .c 文件),以生成汇编语
言文件。注意,虽然 -S 选项的操作对象是预处理文件,但如果直接对源文件进行编译,则 -S 选项相当于添加
了 -E 选项的 -S 选项,即 -ES;而生成的中间文件 —— 预处理文件,会在生成汇编语言文件后被自动删除。
(8) -c
    用汇编器对汇编语言文件进行编译,以生成目标代码(.o)文件。其操作对象是汇编语言文件而不是 .cpp 
(.c)源文件。当 -c 选项以源代码文件为操作对象时,就相当于 -ESc 选项,而生成的中间文件 —— 预处理文
件、汇编语言文件,都会在生成目标代码文件(.o 文件)后被自动删除。
(9) -g
    调试程序而不输出任何文件。
(10) -o
    输出可执行文件。可执行文件名必须紧跟在该选项后面,两者之间以空格分隔。
    -o 选项不仅可以生成可执行文件,还可以与其他选项结合使用,以生成指定文件名的其他编译后文件;因
为 -o 选项本质上只是一个指定文件名的选项 —— 其功能仅用于指定文件名,而真正生成可执行文件或其他编译
后的文件的,是 g++/gcc 的其他命令选项(如果不带任何选项,则 g++/gcc 命令将直接执行编译、链接等一系
列过程而直接生成最终的可执行文件;只是如果没有 -o 选项,所生成可执行文件的文件名为默认的 a.out)。
    当不带任何选项的 g++/gcc 命令执行后(或只带 -o 选项而指定生成可执行文件的文件名),将生成可执
行文件,而其中的所有中间文件 —— 预处理文件、汇编语言文件、目标代码文件,都会被自动删除。
(11) -O
    -O 选项是 -O0、-O1、-O2、-O3、Os 五种选项的统称,作用是在编译过程中控制代码优化操作的等级,各
选项后面的数字和字母字符代表着执行优化的等级。其中 -O0 选项表示不执行优化(关闭所有优化选项),-Os
选项用来优化代码尺寸。详细情况参见 g++/gcc 的 man 手册。
    这些选项常常可以结合使用,例如:
g++ -O -Wall -W -pedantic -ansi -std=c++11 -o pun pun.cpp
gcc -O -Wall -W -pedantic -ansi -std=c99 -o pun pun.cpp

    g++/gcc 支持的后缀文件包括:
(1) .cpp/.c 文件:C++/C 语言源代码文件。
(2) .h 文件:C++/C 程序代码“包含”(#include 指令)的头文件。
(3) .i 文件:经预处理器执行预处理后产生的 C++/C 代码文件(预处理文件)。(-E 选项)
(4) .s 文件:经汇编器编译后产生的汇编语言源文件。(-S 选项)
(5) .o 文件:经编译器编译后产生的二进制文件(目标文件),虽然是二进制文件,但仍不能被直接执行,因
为该文件还未经过链接器的链接(link)。(-c 选项)
(6) .out 文件:经链接器链接后产生的二进制文件(可执行文件)。(-o 选项,或不添加任何选项 —— 这将生
成默认文件名为 a.out 的可执行文件)
    C++/C 源文件以 .cpp/.c 为后缀有一个目的,就是方便编辑器 vi 识别,因为 vi 会根据使用的文件后缀
名来确认文件类型;对于不同的文件类型,vi 会默认设置不同的显示和操作方式。例如对于 .cpp/.c 文件,vi
会对其中的关键字、特殊标识进行高亮显示,以及对括号的匹配进行特殊检查和标记等。

    g++/gcc 编译 C++/C 程序的完整过程如下(总结于李慧芹老师视频所述):
    编辑 C++/C 源文件 -> 预处理 -> 编译 -> 汇编编译 -> 链接 -> 可执行文件
1. 编辑 C++/C 源文件:.cpp/.c
    C++/C 语言并不要求其源文件以 .cpp/.c 为后缀,实际上允许以任何字符为后缀,也可以没有任何后缀。
而 C++/C 源文件以 .cpp/.c 为后缀是应编译器的要求而添加的,也就是说,.cpp/.c 后缀是给编译器看的。编
译器在编译过程的不同步骤会去识别不同后缀的对象文件。
2. 预处理:
g++ -E hello.cpp > hello.i
gcc -E hello.c > hello.i
    “>”是重定向字符。若不进行重定向,则预处理后的输出就只会显示在屏幕上,而不会生成预处理后的 .i 
文件。
    .cpp/.c 文件 -> .i 文件
    凡是源文件中包含 # 字符的部分都是在预处理阶段进行处理的。
3. 编译:
g++ -S hello.i
gcc -S hello.i
    命令执行后自动生成 hello.s 文件(汇编语言文件)。
    .i 文件 -> .s 文件
4. 汇编编译:
g++ -c hello.s
gcc -c hello.s
    命令执行后自动生成 hello.o 文件(目标文件:二进制文件)。
    .s 文件 -> .o 文件
5. 链接:
g++ hello.o -o hello
gcc hello.o -o hello
    命令执行后生成指定的 hello 文件(可执行文件)。如果没有 -o hello,也就是不指定生成的可执行文件
的文件名,即将命令改为:
g++ hello.o
gcc hello.o
    则生成以 a.out 为文件名的默认可执行文件。建议使用 -Wall 选项。
    .o 文件 -> .out 文件或指定文件名的可执行文件。
    以上 5 个步骤可以浓缩为一个步骤(不带任何选项):
g++ hello.cpp
gcc hello.c
    这样生成的可执行文件为默认的 a.out 文件。如果要生成指定文件名的可执行文件,例如名为 myhello 的
可执行文件,则:
g++ -o myhello hello.cpp
gcc -o myhello hello.c
    或:
g++ hello.cpp -o myhello
gcc hello.c -o myhello

    也可以用 make 命令来编译(前提是已经安装了 make 软件包,并编写了 Makefile 文件):
make

    还可以用编译 C 程序的编译命令 gcc 来编译 C++ 程序,只需要添加合适的命令选项;例如,当 C++ 源文
件中包含 iostream 头文件时,在用 gcc 编译命令来编译时,就需要添加 -lstdc++ 选项:
gcc hello.cpp -lstdc++
    因为与 iostream 头文件功能相似的、具有 I/O 功能的 C 头文件是 stdio.h。
    注意,上述代码不能写成:
gcc -lstdc++ hello.cpp 
    即 -lstdc++ 选项必须放在命令行的末尾,否则报错而无法编译。

    再则,还可以使用 cmake 命令来编译(前提是已经安装了 cmake 软件包)。
    如果不喜欢使用 cmake 的命令行方式来编译,则可以使用下面的命令来启动 cmake 的图形化界面来编译:
cmake-gui
    但前提是已经安装了 cmake-gui 软件包 —— 安装命令:
sudo apt-get install cmake-qt-gui
    最后,查看是否已经安装了某个软件包的最简单的方法是,使用软件包相应的命令,添加 -v 或 --version
选项,运行命令后将会显示该软件包的版本信息。如果运行命令后报错,则说明没有安装该软件包,而正常显示
版本信息,则说明已经安装了该软件包。例如:
make -v
cmake --version

第六部分 C++11 新增的运算符 alignof 和 noe×cept(摘录自《C++ Primer Plus》附录 E)

一、alignof 运算符

    计算机系统可能限制数据在内存中的存储方式。例如,一个系统可能要求 double 值存储在编号为偶数的内
存单元中,而另一个系统可能要求其起始地址为 8 个整数倍。运算符 alignof 将类型作为参数,并返回一个整
数,指出要求的对齐方式。详细示例参见《C++ Primer Plus》附录 E。

二、noexcept 运算符

    关键字 noexcept 用于指出函数不会引发异常。它也可用作运算符,判断操作数(表达式)是否可能引发异
常:如果操作数可能引发异常,则返回 false,否则返回 true。例如下面的声明:
int hilt(int);
int halt(int) noexcept;
    如果执行表达式 noexcept(hilt),则其结果为 false,因为 hilt() 的声明未保证不会引发异常;如果执
行表达式 noexcept(halt),则其结果为 true。

End


本书学习建议和说明(摘录自本书的推荐序、前言)

1. 学习语言的一个境界是把自己想象成编译器...。像编译器一样来思考和理解 C++ 语言,如果暂时做不到,
也不要紧,当有了一定的编写程序经验以后,在“揣摩”编译器行为的过程中可逐渐掌握 C++ 语法特性。

2. C 语言给现代计算机提供了一个底层的高级抽象:凡是比它低的抽象都过于简陋,凡是比它高的抽象都可以
用 C 语言构造出来。C++ 成功的根本原因,恰恰是因为它虽然试图提供一些高级的抽象机制,但是其根基与 C
却在同一层面。正因为如此,每当需要直接与硬件对话时,C++ 就成为 C 之外唯一有效率的选择。

3. C++ 之所以脱离 C 而存在,正是因为其强大的抽象能力。C++ 同时支持 4 种不同的编程风格:C 风格、基
于对象、面向对象和泛型。事实上,把微软的 COM 也算进来的话,还可以加上一种“基于组件”的风格。这么多
的风格共存于一种语言,就是其强大抽象机制的证明。

4. 本书无论对于初学者还是提高者,都是最经典的教科全书。... 每个具体的技术领域,只需读四五本书就够
了。本书是其中之一,另一本是《C++ 标准程序库》,第三本是 Scott Meyers 的《Effective C++》,第四本
是 Anthony Williams 的《C++ Concurrenсу in Action》—— 它是学习用标准 C++ 开发并发程序的最佳选择。
国内的作品,则推荐陈硕的《Linux 多线程服务端编程》。

5. 本书注意解释规则背后的基本原理,使读者不仅知其然,还能知其所以然。

6. 本书使用的编译器是 GNU 编译器 4.7.0。本书中只有一小部分特性在此编译器中尚未实现:继承构造函数、
成员函数的引用限定符以及正则表达式库。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值