第2章 变量和基本内置类型

2.1 算术类型

bool
char          character                        8
wchar_t        wide character                16
char16_t      Unicode character           16
char32_t      Unicode character           32
short          short integer                  16
int          integer                          16
long         long integer                   32
long long                                        64
float          single-precision floating-point    6 significant digits
double          double-precision floating-point    10 significant digits
long double     extended-precision floating-point 10 significant digits

char_t类型保证机器最大扩展字符集中任意字符都可以存储

char16_t和char32_t为unicode字符集服务

比特bit、字节byte、字word

1byte=8bit

word的大小与机器有关,一般为4byte

signed和unsigned

对于char类型来说,其实现在不同的机器上可能是不同的,有些是signed,有些则是unsigned,因此在需要用char进行数学算术运算的时候,应该指明符号。

将一个负数,强制转换为一个无符号的数字的时候,结果为这个负数加上无符号数的模。

例如,将-1转换为unsigned short:unsigned short的模为65536,则unsigned short(-1)的结果为65535

更深刻的理解是,将一个负数转换成无符号数字的时候,直接是将其补码的符号位1,当做正常的无符号数字解读,其内存中的数据没有变化,如下:

    cout<<short(0xffff)<<endl;                    //输出-1
    cout<<unsigned short(0xffff)<<endl;            //输出65535
    cout<<unsigned short(short(0xffff))<<endl;    //输出65535

进制表示

15 十进制,015 八进制,0x15十六进制

字符串可以分行书写

    cout<<"姓名 学号\n"
          "王五 0125";

转义序列

\后紧跟1-3个八进制数字

\x后紧跟1-*个十六进制数字

字面值前后缀

前缀

u Unicode 16字符 char16_t

U Unicode 32字符 char32_t

L 宽字符   wchar_t

u8 UTF-8   char[]字符串

后缀

u/U unsigned

l/L   long

ll/LL long long

f/F   float

l/L   long double

类型可以组合,比如42ULL为unsigned long long

2.2 变量

变量初始化

int value1 = 0;
int value2 = {0};
int value3(0);
int value4{0};
//以上四个效果相同

vector<int> value5{1, 2, 3, 4, 5};//存储了1 2 3 4 5
vector<int> value6(10,-1);//存储了10个-1

内置类型(int、double、char)在定义时如果没有给定初始值,将不被初始化。

访问全局变量

int value=10;
int main()
{
    int value=5;//覆盖了全局变量value
    int newValue=::value;//使用::访问全局变量
}

2.3 复合类型

引用reference

int &rValue=value; 变量或者对象的别称,占用同一块内存,在声明引用的时候必须初始化,初始化后不可改变引用的变量或对象。

指针pointer

int *pValue=&value; 声明一个变量,其存储的是另外一个变量的地址。

空指针:

int *pValue=nullptr;

int *pValue=0;

int *pValue=NULL; //需要include<cstdlib>

void *指针

任何类型都可以用void*指针,可以认为void*指针就是对应一块内存区域。

2.4 const限定符

指针和const

const int value = 32;    //value对应的内存不能改变

//指向常量的指针pointer to const
const int *cpValue = &temp;    //cpValue对应的内存可以改变(可以重新指向另一个变量),但是temp不可以通过cpValue改变(指向的变量不能更改)

//常量指针const point
int *const pcValue = &temp;      //pcValue对应的内存不能更改(不可以重新指向另一个变量),temp可以通过pcValue更改(指向的变量可以更改)

//指向常量的常量指针
const int *const cpcValue = &temp;//都不可以更改

constexpr和常量表达式

常量表达式指的是在编译的时候就可以确定的值的常量。

比如下边两个都是常量表达式:

const int max_files = 20;
const int limit = max_files + 1;

但是有时候不能确定一个语句是不是常量表达式,这就可以constexpr进行变量声明,由编译器验证是不是常量表达式:

constexpr int limit = mf + 1;//只有当mf是编译时确定值,表达式才能通过编译

2.5 类型的处理方式

类型别名

typedef double wages, *pWages;//wages是double的别名,pWages是double*的别名

using db = double;//C++11中支持的

auto

auto item = v1 + v2;//由编译器推断item的类型

decltype

选择并返回操作数的数据类型

decltype( f() ) sum = x;

当操作数加括号,表示操作数的引用类型

decltype( (f()) ) sum = x;

时间: 2024-10-24 13:30:48

第2章 变量和基本内置类型的相关文章

流畅python学习笔记:第十二章:子类化内置类型

子类化内置类型 在python2.2之后,内置类型都可以子类化,但是有一个注意事项:内置类型不会调用用户定义的类覆盖的特殊方法.这个说起来比较绕口,什么意思呢.我们来看下下面的代码: class DopperDict(dict):     def __setitem__(self, key, value):         super(DopperDict,self).__setitem__(key,[value]*2) ⑴ if __name__=="__main__":     d

第二章 变量和基本类型(2)

2.1 基本内置类型(略过,没什么可写的,都是一些基本的东西) 2.2 字面值常量 5.字符串字面值 1.之前的字面值都是基本的内置类型 2.字符串字面值,是用双引号括起来的0个和多个字符表示,""或者"hello word" 3.为了兼容C语言,C++中所有的字符串字面值都有编译器g++自动在末尾添加一个空字符. 4.字符字面值'A',表示的是单个字符A 5.字符串字面值"A",表示的是字母A和空字符,2个字符的字符串 2.3 变量 关键概念:

C++内置类型的成员变量初始值的问题探讨

最近碰到个问题,C++内置类型的成员变量(如int)的默认初始值到底是多少? 我的开发环境:VIN7 64位,VS2010. 测试代码: class Solution { public: int a; char c; static int sb; }; Solution x; void main() { Solution s; void *pv = operator new(sizeof(Solution)); Solution *ps = new (pv)Solution(); Solutio

C++ Primer(第五版) 第二章 基本内置类型

容易忘记的部分: 2.1:C++提供的几种字符串类型有哪些及其用途? 基本的字符类型char,一个char的类型和一个机器字节一样 其他字符类型用于拓展字符集,如wchar_t.char16_t.char32_t wchar_t类型确保可以存放机器最大拓展字符集中的任意一个字符 char16_t和char32_t则为Unicode字符集服务 2.2:如何选择所使用的类型 当数值不为负数时,使用无符号类型(unsigned) 一般常用int和long long执行整数的运算 算术表达式中不使用ch

C++ Primer学习总结 第1-2章 变量和基本类型

第1-2章 变量和基本类型 1.下面这个语句在C++98和C++11中的输出结果不同. C++98结果: (如果想要更高的精度,可以用%.9lf,输出9位有效数字) C++11结果: 结论: printf的%lf在C++11中表示longdouble,所以用中%f就可以输出float和double类型.而printf在C++98中可以用%lf正确输出double. 如果是scanf的话,不论C++98还是C++11中float都用%f读取,double都用%lf读取,因为二者结构不同.   2.

C++教程第二章-变量基础

转载请注明出处:http://blog.csdn.net/miaoyunzexiaobao 1.基本内置类型 C++包含算数类型和空类型.其中算数类型包含字符,整型数,布尔值及浮点数.即char,int,long,bool,float,double等.注意这里有一种称为无符号数的类型unsigned,无符号数恒大于0.需要注意,如果在while中执行: <span style="font-size:14px;">unsignedint a = 10; while(a>

C++ Primer 笔记(2)第二章 变量与基本类型

第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常量:每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型, 由单引号括起来的一个字符是char型字面值,有双引号括起来的零个或者多个字符则构成字符串字面值: 20  整形字面值 ‘a’ 字符字面值 “Hello World”或者“”都会字符串字面值 ‘A’表示单独字符A,而“A”

&lt;&lt;C++ Primer&gt;&gt; 第 2 章 变量和基本类型 术语表

术语表 第 2 章 变量和基本类型 地址(address): 是一个数字,根据它可以找到内存中的一个字节 ?? 别名生命(alias declaration): 为另一种类型定义一个同义词:使用 "名字 = 类型" 的格式将名字作为该类型的同义词. ?? 算术类型(arithmetic type): 布尔值,字符,整数,浮点数等内置类型. ?? 数组(array): 是一种数据结果,存放着一组未命名的对象,可以通过索引来访问这些对象. ?? auto: 是一种类型说明符,通过变量的初始

第2章 变量和基本类型

2015-10-08 20:18:32 注:  之前解除过C++比较少,只学过C语言. ----------------------------------------------------------- 内置类型是编程语言自己定义的一些类型,不需要我们自己定义了. 比如bool.int: 空类型Void  不对应具体的值,仅用于特殊的场合,例如最常见的是,当函数不反悔任何值时使用空类型作为返回值. 使用浮点数时,选用double---因为float的精度不够,且计算的时候,双精度和单精度的代