C++ Primer(读书笔记)

C++源文件通常以.cc、.cxx、.cpp、.cp、.C作为后缀来命名

C++语言未定义输入输出语句,而是提供了一个全面的标准库来提供IO机制,对应 iostream、fstream、sstream

std::cout<<"Enter Two Numbers"<<std::endl;,这条语句执行了一个表达式,在C++中,一个表达式产生一个计算结果,它由一个或多个运算对象和一个运算符组成

::为作用域运算符,std代表命名空间

C++注释:双斜线注释//,界定符注释/* */

控制流语句:while语句、for语句、if语句,在Unix系统中,Ctrl+D代表文件结束符

一般而言,C++类的作者决定了类类型对象上可以使用的所有操作

item1.isbn(),其中涉及到点运算符、调用运算符

术语:公共语法特征的实现细节

C++内置类型:整型、浮点型、布尔型、字符型、空类型

带符号类型和无符号类型:除去布尔型和扩展的字符型之外,其他整型可以划分为带符号的和无符号的两种。类型int、short、long和long long都是带符号的,通过在这些类型名前添加unsigned就可以得到无符号类型,例如unsigned long。类型unsigned int 可以缩写为 unsigned。与其他整型不同,字符型被分为了三种,char、signed char、unsigned char。类型char实际上会表现为上述两种形式中的一种,具体是哪种由编译器决定。C++标准并没有规定带符号类型应如何表示,但是约定了在表示范围内正值和负值的量应该平衡,因此,8比特的signed char实际表示范围为-128至127

类型转换:对象的类型定义了对象能包含的数据和能参与的运算,其中一种运算被大多数类型支持,就是将对象从一种给定的类型转换为另一种相关类型

C++默认支持有损精度的类型转换,这方面Java会更严格一些,需要强转

在C++中,我们要尽量避免依赖于实现环境的行为,如果我们把int的尺寸看成是一个确定不变的已知值,那么这样的程序是不可移植的

含有无符号类型的表达式

不要给无符号对象赋一个负值,但是有一些隐含场景需要注意

  • 无符号数和带符号的负值相加,带符号的负值会转换成无符号数;
  • 从无符号数中减去一个值时,需要确保结果不能是一个负值,特别是用在循环判断的场景
  • Java中不存在无符号类型

字面值常量

每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型

整型字面值:以0开头的整数代表八进制数,以0x或0X开头的代表十六进制,对应20、024、0x14,默认情况下,十进制字面值时带符号值,八进制和十六进制字面值即可能是带符号的也可能是无符号的。十进制字面值的类型时int、long、long long中尺寸最小的那个,前提是这种类型能容纳下当前的值。八进制和十六进制字面值的类型时能容纳其数值的int、unsigned int、long、unsigned long、long long、unsigned long long中的尺寸最小者。注意,类型short没有对应的字面值

浮点型字面值是一个double,字面值表现为一个小数或以科学计数法表示的指数,其中指数部分用E或e标识:3.14、3.14E0、0.、0e0、.001

字符和字符串字面值

由单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值。字符串字面值的类型实际上是由常量字符构成的数组,编译器在每个字符串的结尾处添加一个空字符(‘\0'),因此字符串字面值的实际长度要比它的内容多1。如果两个字符串字面值位置紧邻且由空格、缩紧和换行符分隔,则他们实际上是一个整体

转义序列

由两类字符程序员不能直接使用,需要转义:一类是不可打印的字符,一类是C++语言中有特殊含义的字符(单引号、双引号、问号、反斜线)。我们也可以使用泛化的转义序列,其形式是\x后紧跟1个或多个十六进制数字,或者\后紧跟1个、2个或3个八进制数字。

指定字面值的类型

布尔字面值和指针字面值 

true和false是布尔值的字面值;nullptr是指针字面值

变量定义:类型说明符+变量声明符

变量初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替

变量初始化的4种方式:

int units_sold = 0;
int units_sold = {0};
int units_sold{0};
int units_sold(0);

其中,用花括号来初始化变量的方式称为列表初始化,当用于内置类型的变量时,如果初始值存在丢失信息的风险,则编译器将报错

默认初始化

如果是内置类型的变量未被显示初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0,定义在函数体内部的内置类型变量将不被初始化

定义于函数体内的内置类型的对象如果没有初始化,则其值未定义。类的对象如果没有显示地初始化,则其值由类确定

变量声明和定义的关系

为了允许把程序拆分成多个逻辑部分来编写,C++语言支持分离式编译机制,为了支持分离式编译,C++语言将声明和定义区分开来。声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而定义负责创建与名字关联的实体

变量声明规定了变量的类型和名字,在这一点上定义与之相同。但是除此之外,定义还申请存储空间,也可能会为变量赋一个初始值。如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示地初始化变量

变量能且只能被定义一次,但是可以被多次声明

标识符

C++的标识符由字母、数字和下划线组成,其中必须以字母或下划线开头。标识符的长度没有限制,但是对大小写敏感。C++语言保留了一些名字供语言本身使用,这些名字不能被用作标识符。同时,C++也为标准库保留了一些名字。用户自定义的标识符种不能连续出现两个下划线,也不能以下划线紧连大写字母开头。此外,定义在函数体外的标识符不能以下划线开头

作用域

作用域是程序的一部分,C++语言中大多数作用域都以花括号分隔

同一个名字在不同的作用域中可能指向不同的实体。名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束

嵌套作用域

作用域能彼此包含,被包含的作用域称为内层作用域,包含着别的作用域的作用域称为外层作用域

作用域中一旦声明了某个名字,它所嵌套着的所用作用域中都能访问该名字。同时,允许在内层作用域中重新定义外层作用域已有的名字。我们也可以显示的访问外层的变量,例如::reused。

复合类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/6069.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HoloLens2与Unity的Socket通信踩坑日记

最近想让Hololens中获取电脑中更新的数据&#xff0c;打算使用套接字的方式进行通信&#xff0c;明明在unity中模拟测试可以进行正常通信&#xff0c;但是将软件部署到HoloLens上通信总是失败&#xff0c;找了很久的原因&#xff0c;找了很久的原因&#xff0c;终于能够正常通信…

C/C++内存管理(内存分布、动态内存分配、动态内存分配与释放、内存泄漏等)

喵~ 内存之5大区&#xff08;栈区、堆区、静态区、常量区、代码区&#xff09;C/C中各自的内存分配操作符内存泄露?内存泄漏检测方法 内存之5大区&#xff08;栈区、堆区、静态区、常量区、代码区&#xff09; 1、栈区&#xff08;stack&#xff09;&#xff1a;由编译器自动分…

与彭老师交流(北京大学 心理与认知科学学院)

交流&#xff1a;主要是了解人家在做什么对什么感兴趣&#xff0c;和让人家知道你在做什么对什么感兴趣&#xff0c;然后你觉得未来可以做什么有价值的事情。 1.老师做的方向里面有包含利用人工智能这一块的知识&#xff0c;我觉得我是可以做的&#xff0c;机理这一块的东西我不…

三、Docker命令及基本使用

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、帮助启动类命令1.1 启动docker1.2 停止docker1.3 重启docker1.4 查看docker状态1.5 开机启动1.6 查看docker概要信息1.7 查看docker总体帮助文档1.8 查看docker命令…

LLM - ChatGLM-6B (General Language Model) 的工程配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131104546 Paper&#xff1a;GLM: General Language Model Pretraining with Autoregressive Blank Infilling ChatGLM是通用的预训练语…

网络基础一

网络发展 独立模式&#xff1a;计算机之间相互独立。 网络互联&#xff1a;多台计算机连接在一起&#xff0c;完成数据共享。 局域网LAN&#xff1a;计算机数量更多了&#xff0c;通过交换机和路由器连接在一起&#xff1b; 广域网WAN&#xff1a;将远隔千里的计算机都连在…

机器学习15:神经网络-Neural Networks

神经网络是特征交叉的更复杂版本。本质上&#xff0c;神经网络会学习适当的特征组合。本文主要介绍神经网络的结构、隐藏层、激活函数等内容。 目录 1.神经网络&#xff1a;结构 2.隐藏层 3.激活函数 3.1 常用激活函数 3.2 小结 4.神经网络小练习 4.1 第一个神经网络 …

【spring源码系列-05】refresh中prepareRefresh方法的执行流程

Spring源码系列整体栏目 内容链接地址【一】spring源码整体概述https://blog.csdn.net/zhenghuishengq/article/details/130940885【二】通过refresh方法剖析IOC的整体流程https://blog.csdn.net/zhenghuishengq/article/details/131003428【三】xml配置文件启动spring时refres…

【嘉立创EDA】层次原理图功能使用,或放置复用图块方法

文章路标👉 文章解决问题主题内容小结文章解决问题 1️⃣ 在一些较为复杂的原理图绘制时,常需要使用到复用图块。何为复用图块,笔者摘取ST MB1136设计原理图纸可以较好表述这个功能,如下图所示: [本图摘取自NUCLEO-F103RB设计图纸 sheet 2 of 5] 图中左上角绿色图块为…

AI 绘画 - 建筑绘图辅助设计之 Controlnet SEG Depth

前情提要 2023-06-17 周六 杭州 雨转阴 小记: 周末的午休感觉还是没有尽兴&#xff0c;说是要乖乖休息却只是躺下闭目养神。 任务清单: a. Sketchup 安装和学习; b. Sketchup 建模学习; c. Controlnet SEG 语义分割基础&#xff1b; d. Controlnet Depth; 简介 应用实践 …

git 的基本操作

1. git建立本地仓库 在想要建立的目录下输入命令 git init 我们可以看一下 .git目录下有什么 2. 配置git本地仓库 配置用户的 name 和 email 命令&#xff1a;git config [...] 配置完后&#xff0c;我们像查看一下 刚才的配置 2.1 查看配置命令 git config -l 2.2 删除…

PyTorch的ONNX结合MNIST手写数字数据集的应用(.pth和.onnx的转换与onnx运行时)

在PyTorch以前的模型都是.pth格式&#xff0c;后面Meta跟微软一起做了一个.onnx的通用格式。这里对这两种格式文件&#xff0c;分别做一个介绍&#xff0c;依然使用MNIST数据集来做示例 1、CUDA下的pth文件 那pth文件里面是什么结构呢&#xff1f;其实在以前的文章就有介绍过…