数据类型选择的准则:
①当明确知晓数值不可能为负时,选用无符号类型。
②使用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.类体右侧的结束花括号后必须加一个;这是因为类体后可加变量名以示对该类型对象的定义。

Chapter2(变量和基础类型)--C++Prime笔记的更多相关文章

  1. Python 入门学习 -----变量及基础类型(元组,列表,字典,集合)

    Python的变量和数据类型 1 .python的变量是不须要事先定义数据类型的.能够动态的改变 2. Python其中一切皆对象,变量也是一个对象,有自己的属性和方法 我们能够通过 来查看变量的类型 ...

  2. 【c++ Prime 学习笔记】第2章 变量和基本类型

    2.1 基本内置类型 基本数据类型包含了算术类型(arithmetic type)和空类型(void) 算数类型,包含了字符.整型数.布尔值和浮点数 空类型,不对应具体的值 2.1.1 算术类型 算术 ...

  3. Typescript学习笔记(一)基础类型

    为了面向ng2和前端未来,开始搞向ts,ts是微软出的一枚语言,作为es6的超集,他出的一些特性还是蛮好用的(略坑).对于我等纯前端(从开始就接触javascript)的人来说,真想说,这特么什么鬼. ...

  4. C++ 学习笔记 变量和基本类型(一)

    C++ 学习笔记 一.变量和基本类型概述 类型是所有程序的基础.类型告诉我们数据代表什么意思以及可以对数据执行哪些操作. c++基本类型: 字符型 整型 浮点型 c++ 还提供了可用于自定义数据类型的 ...

  5. 【Go入门教程4】变量(var),常量(const),内置基础类型(Boolean、数值 byte,int,rune、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值

    这小节我们将要介绍如何定义变量.常量.Go 内置类型以及 Go 程序设计中的一些技巧. 定义变量 Go 语言里面定义变量有多种方式. 使用 var 关键字是 Go 最基本的定义变量方式,与 C 语言不 ...

  6. go学习笔记-基础类型

    基础类型 布尔值 布尔值的类型为bool,值是true或false,默认为false. //示例代码 var isActive bool // 全局变量声明 var enabled, disabled ...

  7. 学习笔记:TypeScript入门——基础类型

    前言: TypeScript官网断断续续看过几遍,不知道项目中如何使用,有机会还是要实践一下.现在再把文档上不懂的知识点理一遍. 基础类型 1.什么是元组Tuple? 元组类型允许表示一个已知元素数量 ...

  8. 016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值

    016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值 本文知识点:字面值 关于字面值的概念,需要注意:很多地方,我们可能就把字面值 ...

  9. JDK7学习笔记之基础类型

    printf()的基础用法: 变量的基础用法: 字符的输出:

随机推荐

  1. users命令详解

    基础命令学习目录 原文链接:https://blog.csdn.net/m0_38132420/article/details/78861464 users命令用于显示当前登录系统所有的用户的用户列表 ...

  2. iOS 源代码混淆(初步混淆)

    我们可以用classdump对原程序进行 dump,像上篇文章( Class-dump 安装和使用记录(导出应用的头文件)),我们可以看到所有.h 文件全暴露了(如下图) 点击HWAccount.h后 ...

  3. maven实战读书笔记(三)

    maven将一系列的步骤都封装为一系列的插件,运行命令后一系列的插件运行

  4. 第三周linux学习

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  5. 冲刺One之站立会议4 /2015-5-17

    今天我们继续了昨天未完成的部分,把服务器端的在线人数显示做了出来,但是在调试的时候还有一些不可预知的自己也不会改的bug,让我们有点不知所措,启动时间的显示相对来说比较容易实现. 燃尽图4

  6. Hibernate的使用技巧②

    1.Hibernate统计记录的数量 Criteria c = session.createCriteria(User.class.getName());        c.setProjection ...

  7. ORACLE_SQL

    --建立学生表create table Student (       Sno char(9) primary key,       Sname char(20)unique,       Sex  ...

  8. Linux手动添加系统环境共享库路径

    1.在以下目录 #/etc/ld.so.conf.d 添加相应的xxx.conf 2.写入所要共享库的路径 如:/usr/lib/ 3.导入共享库配置 $ldconfig

  9. 项目Beta冲刺(团队)第七天

    1.昨天的困难 服务器部署出了问题,本地服务器差点崩掉 运行一直闪退,在查找哪里出现问题的路上一去不复返 2.今天解决的进度 成员 进度 陈家权 消息功能模块 赖晓连 问答功能模块 雷晶 部署服务器到 ...

  10. [转帖]awk 入门

    awk其实不仅仅是工具软件,还是一种编程语言.不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了. http://www.ruanyifeng.com/blog/2018/11/awk.ht ...