Chapter2(变量和基础类型)--C++Prime笔记

数据类型选择的准则:
①当明确知晓数值不可能为负时,选用无符号类型。
②使用int执行整数运算。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果运算范围超过int的表示范围,则选用long long
③在算术表达式中不要使用char或bool,只有在存放字符或布尔值时才使用它。因为类型char在一些机器上是有符号的,而在一些机器上又是无符号的,所以使用char进行算术运算特别容易出问题。如果真的需要使用一个不大的整数,那么明确指出它的类型是signed char还是 unsigned char
④执行浮点数运算选用double,这是因为float的精度通常不够而双精度浮点数和单精度浮点数的计算代价相差无几。事实上,对于某些机器来说,双精度运算甚至比单精度运算还要快。long double提供的精度在一般情况下不用用到,况且它带来的运算时的消耗也不容忽视。

易错点:常量指针,常量都不可以赋给非常量指针,反之都可。(合法的话,你就可以通过这个指针去修改它了)


1.long long 类型是在C++11中新定义的。

2.字符类型的变量有三种,char,unsigned char,signed char.三种类型的对象在存储介质中的表现形式是一样的(都是一个占8bit的01串,只是解析的时候不同),而char的类型是根据编译器来决定的VC编译器、x86上的GCC都把char定义为signed char,而arm-linux-gcc却把char定义为 unsigned char。

3.带符号数和无符号数进行运算的时候,带符号数会自动转换为无符号数。


4.如果两个字符串字面值位置紧邻且仅由空格,缩进,和换行符,则它们实际上使一个整体。

5.对象是指一块能存储数据并具有某种类型的内存空间。

6.当一次定义了两个或者多个变量时,对象的名字随着定义也就马上可以使用。因此在同一条定义语句中,可以先用定义的变量初始化后定义的变量。

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

8.当我们使用列表初始化且初始化值存在丢失信息的风险,则编译器将报错。

9.内置类型的变量未被显式的初始化,它的值由定义的位置决定。定义于任何函数体之外的的变量被定义为0.定义在函数体内部的内置类型的变量将不被初始化。任何拷贝或者以其他形式访问此类值将引发错误。

10.每个类各自决定其初始化对象的方式。

11.任何包含了显式初始化的声明即成了定义。显式初始化与extern的作用抵消,是声明变成了定义。另外,在函数体内初始化一个由extern关键字标记的变量将引发错误。

12.定义标识符的规则:由于为标准库保留了一些名字
用户自定义的标识符中不能连续出现两个下画线,也不能以下划线紧连着大写字母开头。此外,定义在函数体外的标识符不能以下画线开头。
变量名一般小写。
用户自己定义的类名一般以大写字母开头。

13.因为全局作用域并没有名字,所以当作用域操作符左侧为空的时,向全局作用域发出请求获取作用域操作符右侧名字对应的变量。

14.引用并非对象,没有实际地址,相反的,它只是为了一个已经存在的对象起的另一个别名。除个别例外,所有的引用的类型都要和与之绑定的对象向匹配(例外:初始化常量引用时允许用任意表达式作为初始值----这其中其实自动转换会生成临时量)。而且,引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。引用定义时就必须初始化。

15.解引用符:*

15.void *指针类型可以存放任意对象的地址,但是不能直接操作void *指针所指的对象。即以void *的视角来看内存空间也就仅仅是内存空间,没办法访问内存空间中所存的对象。

16.对于const关键字修饰的对象来说,具体实现过程其实是编译器在编译的过程中把用到该变量的地方都替换为对应的常量。
而默认情况下,const对象被设定为仅在文件内有效。当多个文件中出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量。
如果想在多个文件中共享const对象,必须在其定义声明之前都加入extern关键字。

17.使用const引用可以引用一个非const对象。

18.一般来说,指针的类型和其所指的对象的类型必须一致,但是特例就是允许一个常量指针指向一个非常量对象

19.常量表达式:指值不会改变并且在编译过程就能得到计算结果的表达式。

20.即使使用const关键字修饰了一个变量,但是这个变量还是不能确定是不是常量表达式
比如const int sz = get_size();这里的sz必须到具体运行的时候才能获取到。因此在C++11中加入了一个声明constexpr.由constexpr声明的变量一定是常量。

21:而一般只有引用,指针,算术类型才能用constecpr来修饰,而用其修饰也有严格的初值限制,constexpr指针必须为nullptr或者0或者存储与某个固定地址的对象。一般来说,定义在函数体外的全局变量的存储地址和用static定义的变量的存储地址是固定的,而函数体内定义的变量的存储地址不是固定的。
而需要注意的一点是,当用constexpr声明中定义了一个指针,咋限定符constexpr只对指针有效,与指针所指的对象无光。

22:如果某个类型别名指代的是复合类型或者常量,那么把它用到声明语句里会出大问题 C++Prime P61

23.decltype和auto的区别
①对引用变量的不同之处:auto将引用变量赋给变量后,变量的类型为引用变量所对应的变量的类型。而decltype则是为引用类型。例子如下:
int i = 0,&r = i;
//same
auto a = i;
decltype (i)b = i;
//different
auto c = r; c为int 类型
decltype (r)d = r;//d为int &类型
②处理底层const的方式不同
auto一般会忽略掉顶层的const,同时底层的const会被保留下来
例子:
const int ci = i,&cr = ci;
auto b = ci;整数
auto c = cr;整数
auto d = &i;整型指针
auto e = &ci;指向整数常量的指针
decltype 则会返回该变量的完整类型(包括顶层const和引用在内)
例子:
const int ci = 0,&cj = ci;
decltype (ci) x = 0;const int 型
decltype (cj) y = x;const int 型
decltype (cj) z ;错误,z是一个引用,引用必须初始化

另外decltype ((variable))  (注意是双层括号)的结果永远是引用,而decltype(variable)结果只有当variable本身是一个引用的时候才是一个引用。

24.类体内定义的名字必须唯一,但是可以与类外部定义的名字重复。

25.类体右侧的结束花括号后必须加一个;这是因为类体后可加变量名以示对该类型对象的定义。

转载于:https://www.cnblogs.com/LyndonMario/p/9326104.html

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

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

相关文章

redis 值字符串前面部分乱码_StringBoot 整合Redis解决存储乱码(通过StringRedisSerializer来进行序列化)...

org.springframework.bootspring-boot-starter-redis1.4.7.RELEASE注意:spring-boot-starter-data-redis与spring-boot-starter-redis引入的包基本一致,都是基于Jedis的,所以没区别。第一种方法:在你需要调用RedisTemplate的类中引…

全国计算机等级考试题库二级C操作题100套(第06套)

第06套: 给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时, 程序输出: x15.000000, x23.000000, x1x1x1x240.000000 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序…

最新处理器排名_安兔兔Android处理器天梯榜发布:最强的还是它

点击上方蓝字【安兔兔】关注我文章每天不断更!为了让大家对自己使用的手机处理器性能有一个更直观的认知,安兔兔今天正式发布了Android手机处理器天梯榜。由于安兔兔V8增加了存储和刷新率在总分方面所占据的权重,因此为了避免手机配置对排名造…

vue动态切换css文件_如何在vue组件中动态的引入css文件?

问题描述如标签描述的不准确,请见新直能分支调二浏页器朋代说谅我的需求是开的接都上的和,近很触是没他电同近很触是没发多套皮肤,打包的时候只加载其中某一种的皮肤(不需要动态换肤),因为css文件过大,后期配套的css文…

fastreport 直接调网络打印机_为什么UV打印机不能打印凹凸不平的材料?

大家都知道UV打印机又叫万能平板打印机,顾名思义就是什么都能打?答案当然是否定的!万能只是说它可以打印的材料很广泛,而不是大家根据字面所理解的。那么什么样的材料是UV打印机所不能打印的呢?今天小编就单单讲讲其中…

[译]JavaScript:ES6中的模板字符串简介

原文:http://tc39wiki.calculist.org/es6/template-strings/ ES6中的模板字符串(template string)是一种能在字符串文本中内嵌表达式的字符串字面量(string literal).这种操作在其他语言(比如shell->perl->php等)中通常称之为字符串内插(string interpolation)或者叫变量…

全国计算机等级考试题库二级C操作题100套(第07套)

第07套: 程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLA…

【NOI 2018】归程(Kruskal重构树)

题面在这里就不放了。 同步赛在做这个题的时候,心里有点纠结,很容易想到离线的做法,将边和询问一起按水位线排序,模拟水位下降,维护当前的各个联通块中距离$1$最近的距离,每次遇到询问时输出所在联通块的信…

jdbc连接mysql数据库的常用对象_JDBC常用对象

主要作用:注册驱动 实际开发中使用Class.forName("com.mysql,jdbc.Drive");这种方式,因为之前的方式会导致注册两次驱动获得连接 Connection getConnection(String url,String username,String password)url写法:jdbc:mysql://loca…

latex大括号 多行公式_如何快速入门 LaTeX,在 XMind 2020 中轻松输入方程。

数学方程输入对于很多理工科朋友来说是一件让人头疼的事情。不仅是数学方程本身就纷繁复杂花样百出,各种输入语法更是劝退无数人。然而很多看似复杂的东西其实并非如想象中的难,抓住本质即可快速入门。今天和大家分享下如何快速入门 LaTeX,在…

全国计算机等级考试题库二级C操作题100套(第08套)

更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程刷题面经求职讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进…

部署及配置Lync Server 2013 监控功能

在上面一篇文章中我们已经部署了存档功能,并且在标准版环境搭建了一台SQLServer服务器作为后端数据库服务器,有了这台服务器我们可以做什么呢?存档,当然还有监控,以及整个CMS。当然这都是一步一步演变的,并…

python处理excel的方法有哪些_python简单处理excel方法

1 # codingutf-8 2 3 import xlrd # 读模块4 import xlwt # 写模块5 6 7 def read_excel():8 """9 读取excel文件方法说明(此函数只是对xlrd用法的说明,看看就好。xlrd已经很好用了)10 :return:11 """12 # 打开…

mysql 客户服务号获取_《MySQL排错指南》——1.4 获取查询信息-阿里云开发者社区...

本节书摘来自异步社区出版社《MySQL排错指南》一书中的第1章,第1.4节,作者:【美】Sveta Smirnova(斯维特 斯米尔诺娃),更多章节内容可以访问云栖社区“异步社区”公众号查看。1.4 获取查询信息正如前一节看到的一样,数…

全国计算机等级考试题库二级C操作题100套(第09套)

第09套: 给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。 请在程序的下划线处…

基于交换芯片的五元组的PCL规则过滤功能

2019独角兽企业重金招聘Python工程师标准>>> 基于交换芯片的五元组的PCL规则过滤功能作者: 韩大卫吉林师范大学2012.12.10Not Approved by Document Control Review Copy Only基于Marvell 98DX51xx/81xx交换芯片的五元组等的策略规则(PCL)过滤功能.现将部分的功能的…

python生成树状图_python 生成 树状结构

forwarding_recp re.compile(".*?发件人:(.*?);.*?发送时间:.*?收件人:(.*?)主题", re.S)def parse_addr(addr, split_str,): l[]ifaddr:for a inaddr.split(split_str): l.append(utils.parseaddr(a)[1])returnldef gen_forwarding(con): #参数是解析过后的邮…

remove()与empty()的区别

1、empty() - 从被选元素中删除子元素; 2、remove() - 删除被选元素(及其子元素); 3、remove() 方法也可接受一个参数,允许您对被删元素进行过滤。转载于:https://www.cnblogs.com/hwldyz/p/9335717.html

2013年6月和12月CISA考试报名,认证,CPE维持和备考要点

2013年6月和12月CISA考试报名,认证,CPE维持和备考要点 2013年6月和12月CISA考试报名,认证,CPE维持和备考要点 消息来源:http://www.isaca.org/CERTIFICATION/CISA-CERTIFIED-INFORMATION-SYSTEMS-AUDITOR/REGISTER-FOR-THE-EXAM/Pages/default.aspx在线报名费用 早…

全国计算机等级考试题库二级C操作题100套(第10套)

第10套: 给定程序中,函数fun的功能是:判定形参a所指的NN(规定N为奇数)的矩阵是否是"幻方",若是,函数返回值为1; 不是,函数返回值为0。“幻方"的判定条件是…