变量和基本类型

不同平台下基本类型的字节数

类型

16位平台

32位平台

64位平台

char

1

1

1

short

2

2

2

int

2

4

4

long

4

4

8

long long

/

8

8

指针

2

4

8

float

4

4

4

double

8

8

8

类型的最小尺寸

类型

含义

最小尺寸

bool

布尔类型

未定义

char

字符

8位

wchar_t

宽字符

16位

char16_t

Unicode字符

16位

char32_t

Unicode字符

32位

short

短整型

16位

int

整型

16位

long

长整型

32

long long

长整型

64

float

单精度浮点数

6位有效数字

double

双精度浮点数

10位有效数字

long double

扩展双精度浮点数

10位有效数字

数据类型选择的经验准则

  • 当知晓数值不可能为负时,选用无符号类型
  • 使用int执行整数运算,short常常太小,long和int一般尺寸一样。如果int不够,用long long。

  • 在算数表达式中不要使用char或bool,使用char特别容易出问题。如果要使用一个不大的整数,那么明确执行为signed char或unsigned char。

  • 执行浮点数运算用double,float通常进度不够而且两者计算代价相差无几。Long double一般没有必要,且消耗不容忽视。

有符号类型和无符号类型

  • 无符号类型赋值超出其范围,结果是取模后的值。如unsigned char c = -1;  //假设char占8bit,c的值为255
  • 有符号类型赋值超出其范围,结果未定义。如signed char c2 = 256;  //假设char占8bit,c2的值未定义
  • 切勿混用带符号类型和无符号类型。
  • 算数表达式中既有无符号数又有带符号数,带符号的数会转换成无符号的数

指定字面值的类型

字符和字符串字面值

前缀

含义

类型

u

Unicode16字符

char16_t

U

Unicode32字符

char32_t

L

宽字符

wchar_t

u8

UTF-8(仅用于字符串字面常量)

char

整型字面值

浮点字面值

u or U

unsigned

f or F

float

l or L

long

l or L

long double

ll or LL

long long

初始化与赋值

初始化和赋值是两个完全不同的操作

  • 定义于函数体(块作用域)内的内置类型的对象如果没有初始化,则其值未定义。养成初始化内置变量的习惯。
  • 类的对象如果没有显式地初始化,则其值由类确定。

声明与定义

  • 声明使得一个名字为程序所知,定义会申请存储空间,还可能为其赋初始值
  • (分离式编译)

    如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量

  • 对于复杂的声明语句,可以从变量名从右往左理解

指针

  • 常见错误:解引用无效指针(空指针或已释放的指针)
  • 建议:初始化所有指针,并且尽量等定义了对象之后再定义指向它的指针。
  • 推荐nullptr而非0,0指针具有二义性。

const和constexpr

  • const对象默认在文件内有效,当多个文件出现了同名const变量,等同于不同文件中定义了独立的变量。

    如果想不同文件之间共享const,则不管在声明还是定义中都添加extern关键字。

  • 顶层const表示本身是个常量,底层const表示指针指向的对象是一个常量。

  • 执行对象拷贝操作时,顶层const不受影响,底层const却不容忽视

常量表达式:值不会改变且在编译阶段就能计算结果的表达式。

  • 复杂系统中很难分辨初始化是不是常量表达式,C11允许声明为constexpr由编译器来验证
  • 尽管指针和引用可以定义成constexpr,其初始值受到严格的限制。constexpr指针的初始值必须是nullptr或者0,或者是储存于某个固定地址中的对象。储存于函数体之外的对象其地址固定不变,能用来初始化constexpr指针。

auto与decltype

  • auto一般会忽略掉顶层const,同时保留底层const。
  • decltype的表达式是一个变量,则decltype返回该变量的类型,包括顶层const和引用在内。

  • decltype如使用的表达式不是一个变量,则返回表达式结果对应的类型。
  • 如表达式是解引用操作,则得到引用类型。

  • 如果是加了双层括号的变量,则结果永远是引用。

预处理变量无视C++中关于作用域的规则

C/C++基础----变量和基本类型的更多相关文章

  1. C#_02.12_基础二_.NET类型存储和变量

    C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...

  2. 前端知识体系:JavaScript基础-变量和类型

    前端工程师自检清单 1. JavaScript规定了几种语言类型 2. JavaScript对象的底层数据结构是什么 3. Symbol类型在实际开发中的应用.可手动实现一个简单的 Symbo 4. ...

  3. typescript学习笔记(一)---基础变量类型

    作为一个前端开发者,学习新技术跟紧大趋势是必不可少的.随着2019年TS的大火,我打算利用一个月的时间学习这门语言.接下来的几篇文章是我学习TS的学习笔记,其中也会掺杂一些学习心得.话不多说,先从基础 ...

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

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

  5. GO语言基础(结构+语法+类型+变量)

    GO语言基础(结构+语法+类型+变量) Go语言结构 Go语言语法 Go语言类型 Go语言变量       Go 语言结构 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 &a ...

  6. Javascript基础回顾 之(一) 类型

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  7. [.net 面向对象编程基础] (5) 基础中的基础——变量和常量

    [.net面向对象编程基础]  (5) 基础中的基础——变量和常量 1.常量:在编译时其值能够确定,并且程序运行过程中值不发生变化的量. 通俗来说,就是定义一个不能改变值的量.既然不能变动值,那就必须 ...

  8. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  9. 5、C#基础 - C#的值类型

    1.C#的值类型 有几个特点: 存储在栈里 基于值类型的变量直接包含值(值类型存储实际值). 将一个值类型变量赋给另一个值类型变量时,将复制包含的值. 这与引用类型变量的赋值不同,引用类型变量的赋值只 ...

随机推荐

  1. [转载]JS浏览器兼容性问题

    from:http://dada-fangfang.iteye.com/blog/811749 做BS开发就难免会用到javascript,而每个浏览器对javascript的支持有不同.这就需要我们 ...

  2. (转)Secondary NameNode的作用

    在Hadoop中,有一些命名不好的模块,Secondary NameNode是其中之一.从它的名字上看,它给人的感觉就像是NameNode的备份.但它实际上却不是.很多Hadoop的初学者都很疑惑,S ...

  3. 《Python》 列表、元祖和range

    一.列表: 1.Python基础数据类型之一: 2.其他语言中也有列表的概念,js 数组: 3.可索引,可切片,可加步长: 4.列表可以存储大量的数据: 第一:索引,切片,切片+步长. 第二:增删改查 ...

  4. 【转】Linux编程之UDP SOCKET全攻略

    转自:http://www.cnblogs.com/skyfsm/p/6287787.html?utm_source=itdadao&utm_medium=referral 这篇文章将对lin ...

  5. 福大软工 · BETA 版冲刺前准备

    拖鞋旅游队BETA 版冲刺前准备 前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10083834.html 本次作业:https://edu.c ...

  6. js 的垃圾回收器 原理 坑 优化-- 待续

    JavaScript垃圾回收的机制很简单: 找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是时时的, 因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行. 什么叫不再使用的变 ...

  7. js中的转换方法

    1.var colors =['red','blue','green']; console.log(colors.toString()); // red,blue,green 总结:toString( ...

  8. OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏

    自动释放池: @autoreleasepool { } 内存管理机制       谁污染,谁治理 垃圾回收机制:gc(Garbage collection),由系统管理内存,开发人员不需要管理. OC ...

  9. 第三篇 makefile的伪目标

    我们来思考一下makefile中的目标究竟是什么?实际上,在默认情况下:    1.make将makefile的目标认为是一个文件:    2.make解释器比较目标文件和依赖文件的新旧关系,决定是否 ...

  10. RCNN、SPP-net、Fast-RCNN和Faster-RCNN

    RCNN RCNN (Regions with CNN features) 的核心思想是把图像划分成N(2000)个独立的区域,分别提取每个区域的CNN特征,然后把这些特征使用SVM等分类器进行结果预 ...