C++ Primer 第五版:第五章「语句」习题答案
第五章:语句
练习5.1
什么是空语句?什么时候会用到空语句?
只含有一个单独的分号的语句是空语句。如:
1 | ; |
如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。(建议做好注释说明空语句作用)
1 | //重复读入数据直至到达文件末尾或某次输入的值等于sought |
练习5.2
什么是块?什么时候会用到块?
用花括号括起来的语句和声明的序列就是块。
1 | { |
如果在程序的某个地方,逻辑上需要多条语句,而语法上只能容纳一条语句,此时应该使用块。
1 | while (val <= 10) { |
练习5.3
使用逗号运算符重写(参见4.10节,第140页)1.4.1节的 while 循环,使它不再需要块,观察改写之后的代码可读性提高了还是降低了。
1 | while (val <= 10) |
代码的可读性降低了。
练习5.4
说明下列例子的含义,如果存在问题,试着修改它。
1 | (a) while (string::iterator iter != s.end()) { /* . . . */ } |
- (a) 这个循环试图用迭代器遍历string,但是变量的定义应该放在循环的外面,目前每次循环都会重新定义一个变量,明显是错误的。
- (b) 这个循环的 while 和 if 是两个独立的语句,if 语句中无法访问 status 变量,正确的做法是应该将 if 语句包含在 while 里面,
练习5.5
写一段自己的程序,使用if else 语句实现把数字转换为字母成绩的要求。
练习5.6
改写上一题的程序,使用条件运算符(参见4.7节,第134页)代替if else语句。
C++ Primer 第五版:第四章「表达式」习题答案
第四章:表达式
练习4.1
表达式 5 + 10 * 20 / 2 的求值结果是多少?
105
练习4.2
根据4.12节中的表,在下述表达式的合理位置添加括号,使得添加括号后运算对象的组合顺序与添加括号前一致。
- (a) *vec.begin()
- (b) *vec.begin() + 1
1 | *(vec.begin()) |
练习4.3
C++语言没有明确规定大多数二元运算符的求值顺序,给编译器优化留下了余地。这种策略实际上是在代码生成效率和程序潜在缺陷之间进行了权衡,你认为这可以接受吗?请说出你的理由。
可以接受。C++的设计思想是尽可能地“相信”程序员,将效率最大化。然而这种思想却有着潜在的危害,就是无法控制程序员自身引发的错误。因此 Java 的诞生也是必然,Java的思想就是尽可能地“不相信”程序员。
练习4.4
在下面的表达式中添加括号,说明其求值过程及最终结果。编写程序编译该(不加括号的)表达式并输出结果验证之前的推断。
1 | 12 / 3 * 4 + 5 * 15 + 24 % 4 / 2 |
((12/3)*4) + (5*15) + ((24%4)/2)
实际输出结果:91。
练习4.5
写出下列表达式的求值结果。
1 | -30 * 3 + 21 / 5 // -90+4 = -86 |
练习4.6
写出一条表达式用于确定一个整数是奇数还是偶数。
1 | if (i % 2 == 0) /* ... */ |
练习4.7
溢出是何含义?写出三条将导致溢出的表达式。
溢出含义:当计算的结果超出该类型所能表示的范围时就会产生溢出。
1 | short svalue = 32767; ++svalue; // -32768 |
练习4.8
说明在逻辑与、逻辑或及相等性运算符中运算对象的求值顺序。
- 逻辑与运算符和逻辑或运算符都是先求左侧运算对象的值再求右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值。这种策略称为短路求值。
- 相等性运算符未定义求值顺序。
VSCode配置总结笔记
1   下载及安装VSCode
- 下载:VSCode System Installer
- 安装:默认路径安装,选项额外添选上下文菜单(文件和目录)
镜像加速下载的方法:将下载链接URL中的stable
之前的字符全部改为https://vscode.cdn.azure.cn/
即可。
2   配置远程主机SSH连接使用VSCode
- 使用
https://aka.ms/install-vscode-server/setup.sh
的安装教程已经过时,这个链接甚至都被重定向成https://vscodeserverlauncher.blob.core.windows.net/builds/setup-scripts/setup.sh
这种主机失联的域名。这篇VSCode官方博文教程-The Visual Studio Code Server已过时。 - 如果想使用远程隧道(tunnel)访问连接使用VSCode,参考这篇官方博文Remote Development Even Better。
- 根据VSC remote leaves behind old server versions and extensions data at each VSC update这篇issue的信息,VS Code Server正常会在服务器上保留最近5个版本的副本。可以自行登录服务器查看
/root/.vscode-server/cli/servers
有多少个副本文件夹。
- 安装
Remote - SSH
扩展插件。 - 点击这个扩展插件图标,点击设置SSH配置文件。配置方法见管理多个SSH远程服务器
- 首次连接,VSCode会在远程服务器上安装VSCode Server,安装完成后,VSCode会自动连接远程服务器。可以大致一窥对应的VSCode Server文件构成(如果是普通账户,路径前缀是
/home/yourname
,对应$HOME
环境变量):
1 | # 2901c5ac6db8a986a5666c3af51ff804d05af0d4为vscode当前构建版本的commit id |
- 后续如果有版本变动升级,请确保服务器和本地都及时更新,不然本地新版本连过去,会一直重复部署新的VSCode Server的操作。
- 服务器和本地的VSCode的扩展插件是分开管理的。
假设如果因为种种原因需要手动下载VS Code Server程序(例如因为网络问题,一直卡在下载文件,文件占用一直是零字节),也有其他方法能实现:
- 先下载
vscode-server-linux-x64.tar.gz
压缩包。
1 | https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable(注意把:${commit_id}替换成对应的Commit ID) |
- 上传至
/root/.vscode-server/cli/servers/Stable-${commit_id}/
路径下,直接解压到文件夹vscode-server-linux-x64
,然后将vscode-server-linux-x64
文件夹重命名server
。这里参考上述的VSCode Server文件构成即可。 - 之后就可以尝试本地连接远程服务器了。
远程VSCode所支持的SSH server服务器主机类型:
Remote SSH host: A running SSH server on:
- x86_64 Debian 8+, Ubuntu 16.04+, CentOS / RHEL 7+.
- ARMv7l (AArch32) Raspberry Pi OS (previously called Raspbian) Stretch/9+ (32-bit).
- ARMv8l (AArch64) Ubuntu 18.04+ (64-bit).
- Windows 10 / Server 2016/2019 (1803+) using the official OpenSSH Server.
- macOS 10.14+ (Mojave) SSH hosts with Remote Login enabled.
- 1 GB RAM is required for remote hosts, but at least 2 GB RAM and a 2-core CPU is recommended.
3   配置C/C++开发环境
3.1   MSVC CL编译器的安装和环境设置
- 下载(
CMake
和Ninja
可以不用单独下载安装,MSVC CL
编译器的Visual Studio Installer
管理器可以统一管理下载和更新)- MSVC CL编译器(Visual Studio 2022 生成工具),
所有下载
->用于 Visual Studio 的工具
->Visual Studio 2022 生成工具
。 CMakeNinja
- MSVC CL编译器(Visual Studio 2022 生成工具),
- 安装「Visual Studio 2022 生成工具」,然后勾选对应包下载安装
- 工作负荷:使用C++的桌面开发
- MSVC v143 - VS 2022 C++ x64/x86生成工具(最新)
- Windows 11 SDK (10.0.26100.0):建议选择最新的系统版本号
- 用于 Windows 的 C++ CMake 工具(包含CMake和Ninja)
- 单个组件
- 对 LLVM(clang-cl)工具集的 MSBuild 支持
- 适用于 Windows 的C++ Clang 编译器(18.1.8)
- MSVC v143 - VS 2022 C++ x64/x86 Spectre 缓解库(最新)
- 工作负荷:使用C++的桌面开发
- 分别添加程序路径到系统环境变量
Path
- MSVC CL编译器路径:
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.42.34433\bin\Hostx64\x64
- LLVM CLANG编译器路径:
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\x64\bin
- CMake路径:
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
- Ninja路径:
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja
- MSVC CL编译器路径:
- 拷贝
.vscode
配置文件夹
3.2   更新MSVC后找不到CL命令
使用Visual Studio Installer
更新MSVC后,编译器版本号可能会变更,如果在终端运行cl命令后提示找不到程序,需要手动更新两处地方的CL编译器路径:
- 系统环境变量
Path
.vscode
配置文件夹中的c_cpp_properties.json
4   VSCode源代码管理
对于新建的空仓库,使用clone命令克隆仓库后,第一次用vs code进行commit时,若使用「同步更改」命令提示说找不到远程仓库时,可以直接使用「推送到」命令。
5   Codeium(Windsurf)扩展插件的帐号token获取及使用
一般直接通过Codeium Auth登录帐号即可使用扩展插件。
5.1   token获取
如果不想登录帐号,而是想要通过ctrl+shift+p
执行Codeium: Provide Authentication Token
命令输入token的话。首先需要获取token,获取方式:
- 方式一:官网直链获取(此直链是会提示关联vim扩展,但token都是通用的,同样适用于VSCode的扩展),直接在该网址中登录帐号即可获取「Provide Authentication Token」
- 方式二:参考token使用的1-4步骤。
5.2   token使用
- VSCode安装好Codeium扩展插件。
- 左下角,点击Codeium Auth登录按钮,首先插件会弹窗请求跳转到网页输入帐号登录。
- 直接关闭打开的网页,点击右下角「在线帐号登录」的cancel按钮。
- 之后插件会弹窗请求跳转到网页输入帐号登录,这个在线网址则是获取「Provide Authentication Token」。(如果已经提前获取到token,这里可以不登录网页帐号,直接关闭网页)
- 最后通过
ctrl+shift+p
执行Codeium: Provide Authentication Token
命令输入token即可正常登录。
6   拓展插件
6.1   LaTeX-Workshop
报错提示command 'latex-workshop.onEnterKey' not found
问题现象:在tex
文件中使用Enter
键会出现报错信息,提示command 'latex-workshop.onEnterKey' not found
,只有Ctrl+Enter
键才能正常输入回车。
解决方案:卸载LaTeX-Workshop
扩展插件,关闭VSCode
程序,确保VSCode
正常移除插件的缓存文件。然后重新打开VSCode
,重新安装LaTeX-Workshop
。
7   参考文献
[1] [Question] How can I get codeium auth token[EB/OL]. https://github.com/Exafunction/codeium.vim/issues/150.
[2] VsCode下载,使用国内镜像秒下载[EB/OL]. https://blog.csdn.net/bielaiwuyang1999/article/details/117814237.
[3] Remote Development using SSH[EB/OL]. https://code.visualstudio.com/docs/remote/ssh.
[4] VS Code Server的离线安装过程[EB/OL]. https://zhuanlan.zhihu.com/p/294933020.
[5] 使用 vscode + Remote-SSH 插件 + vscode-server 进行远程开发[EB/OL]. https://zhuanlan.zhihu.com/p/493050003.
[6] 最香远程开发解决方案!手把手教你配置VS Code远程开发工具,工作效率提升N倍[EB/OL]. https://www.cnblogs.com/NanoDragon/p/12899430.html.
[7] Visual Studio Code Server[EB/OL]. https://code.visualstudio.com/docs/remote/vscode-server.
CAD总结笔记
1   Autodesk CAD
1.1   版本下载
下载地址:
- Autodesk CAD 2026(简体中文版)
- Autodesk CAD 2025(简体中文版)
- Autodesk CAD 2024(简体中文版)
- Autodesk CAD 2023(简体中文版)
- Autodesk CAD 2022(简体中文版)
- Autodesk CAD 2021(简体中文版)
- Autodesk CAD 2020(简体中文版)
- Autodesk CAD 2019(简体中文版)
- Autodesk CAD 2018 R1(简体中文版)
- Autodesk CAD 2018(简体中文版)
- Autodesk CAD 2017(简体中文版)
- Autodesk CAD 2016(简体中文版)
1.2   官方文档查阅
1.3   优化CAD性能
- 只用SHX字体,不要用系统真字体,例如宋体、黑体之类的粗字体。SHX的量级要远比TTF字体来得轻便,可以极大减小文件的尺寸,改善缩放平移以后的性能。
- 开启硬件加速
- 清理图面,善用清理命令及插件
2   浩辰CAD
2.1   版本下载
下载地址:
3   参考文献
[1] AutoCAD小秘密038:SHX大字体的通天塔[EB/OL]. https://zhuanlan.zhihu.com/p/52121478.
[2] 详解AutoCAD的.TTF字体和.SHX字体文件[EB/OL]. https://www.cadzxw.com/711.html.
[3] AutoCAD全系列版本官方下载地址[EB/OL]. https://www.thcad.net/question/10513.html.