wchar_t,char16_t,char32_t用于拓展字符集

char和signed char并不一样,由编译器决定类型char表现上述两种中的哪一种

一般long的大小和int无二,如果超过int的范围直接使用long long类型

float比较鸡肋,精度和速度都不如double(在某些机器上),所以小数索性都用double

若值超过无符号类型最大值,则获得的实际值=value%MaxValueOfType;若值超过有符号类型最大值,结果无法预知

算数表达式中若存在无符号类型,则其他运算数自动转化为无符号型,造成错误,而且结果也不可能小于0

以0开头表示八进制数,以0x或0X开头表示十六进制数

字符串等价于字符数组(末尾带有编译器赋予的'\0'),多行表示格式:

  std::cout<<"a really, really long string literal "

       "that spans two lines."<<std::endl;

转义字符

  换行符:\n  横向制表符:\t  响铃符:\a  纵向制表符:\v  退格符:\b  双引号:\"  反斜线:\\  问号:\?  回车符:\r  进纸符:\f

字面值常量的前缀和后缀:

  前缀:u 指定类型 char16_t

     U 指定类型 char32_t

     L  指定类型 wchar_t

     u8 指定类型 char(此前缀仅可用于字符串字面值常量,表示UTF-8)

  后缀:  u或U 指定类型 unsigned及更大

     l或L 指定类型  long及更大

     ll或LL  指定类型  long long及更大

     f或F  指定类型 float(浮点数字面值)

     l或L 指定类型 long double(浮点数字面值)

初始化的形式也可以是:int i={0};(c++11)  int i (0);  int i {0};(c++11)

  其中的花括号初始化法可以确保不存在数据因转化类型造成的丢失(一旦有丢失的风险就会报错)

基本类型的值如果在函数体之外未被初始化,其值为0;

  基本类型的值如果在函数体之内未被初始化,其值不可知,任意对此值的访问将引发错误

仅想声明一个变量而不定义它,使用关键字extern: extern int i;(不定义意味着不申请存储空间且不赋予初始值)

此类名字不可用:fuck__drug,   _Grug,   _drug(函数体外)

允许内层作用域中重新定义外层作用域的名字,反之不可

引用:(通常指左值引用,c++11引入了右值引用的概念)

  例如:int ival=1024;

     int &refVal=ival;(refVal指向ival,认为refVal是ival的一个别名,而且不能再转而指向其他元素,即绑定在一起:你就是我,我就是你)

     若如:int &refVal2;则发生错误,引用声明后必立即初始化,即指向一个对象(字面值不可)

指针:(本身即是对象)

  例如:int *ip1,*ip2;(这里类型是int*,即int型指针,ip1和ip2仅是名字)

     int *p=&ival;(获取ival的地址赋予p,p存放ival的地址)

     int ivalValue=*p(使用解引用符*能访问对象)

     *p=100;(此举使得ival的值为100,   指针指向了对象,也就获得了对对象的操作权)

     int *p3=nullptr;(c++11)(等效于int *p3=0;等效于int *p3=NULL;p3为空指针,不指向任何对象)

void*指针:(可用于存放任意对象的地址,然而不能利用void*指针直接访问对象)

指向指针的引用:int *&r=p;(修饰符从右往左读)

const限定符

  例如:const int buffSize=512;(由于const的修饰,之后禁止再对buffSize赋值)

     const int conExp;(此表达式不合法,必须初始化)

  默认const对象仅在文件内有效,若希望const对象也能在其他文件中使用,则加上extern关键字:

     extern const int bufSize=fcn();

     其他文件调用时:extern const int bufSize;

  对常量的引用必须也是常量,自然地,其值不能变更:

     const int &bufSize1=buffSize;

  然而对一般量的引用也可以是常量,只是不能再通过此常量引用修改其值:

     int i=12;  const int &integ=i;     

  类似地,也有指向常量的指针,用来存放常量的地址而无法通过指针进行更改,而且此种指针可以指向一般量,但也不能借此指针更改其值:

     const int *ptr=&buffSize;

     const int *prt1=&i;

  与一般对象一样,指针自身也可以是常量(除去指针本身的性质外,其常量的特性与一般常量无二):

     int *const ptr2=&i;

     const int *const ptr3=&buffSize;

     (注意,这里第一个const(即底层const)使得ptr3能够指向常量buffSize,而第二个const(即顶层const)则决定指针自身即为常量)

constexpr和常量表达式

   const int A=20;(等号的左边和右边都必须是const值才是常量表达式)

   声明为constexpr的变量必定是常量而且仅能通过常量表达式进行初始化,而且constexpr指针只能指向地址固定的对象或nullptr

    constexpr int mf=20;(c++11)

定义类型别名typedef:

   例如:typedef double wages;(wages是double的同义名)

      typedef wages bunble,*p;(bunble是double的同义名,p是double*的同义名)

      (注意:const p *p1=0;表示p1是常量指针(顶层常量),const double *p2=&i;表示p2是指向常量的指针(底层常量))

   也可以: using SI=Sales_items;(c++11)(SI是Sales_items的同义名)

auto类型说明符:(c++11)(让编译器分析所属的类型)

   例如:auto item=val1+val2;

      auto sz=0,pi=3.14;(不可行,一条语句只能是一种类型)

      auto *p1=&i,&prf=i;(注意将*,&连结在声明符上)

   (注意:auto会忽略顶层const,如果强调顶层const则需要明示:const auto f=ci;)

decltype类型指示符:(c++11)

   例如:decltype( f ( ) ) sum = x;(sum的类型为f()的类型)

      decltype(*p) p2=i;(*p解引用后的类型是int&,故必须初始化)

      decltype( ( i ) ) p3=j;(多一层括号后的类型是int&

c++11允许为数据成员提供类内初始值 

预处理器可以使头文件多次包含仍能正常工作

  #ifndef SALES_DATA_H

  #define SALES_DATA_H

  /*........*/

  #endif

C++Primer 5th Chap2 Variables and basic Types的更多相关文章

  1. [C++] Variables and Basic Types

    Getting Started compile C++ program source $ g++ -o prog grog1.cc run C++ program $ ./prog The libra ...

  2. C++ Variables and Basic Types Notes

    1. Type conversion: If we assign an out-of-range value to an object of unsigned type, the result is ...

  3. C++Primer 5th 练习 12.19

    这阵子真是太忙了, 连续做了四个课设. 当然这并不能作为好久没写博客的借口, 没写博客的主要原因只有一个: 懒. 最近又开始回顾C++的语法与特性(据说C++就是一门需要反复回顾的语言),以及学习C+ ...

  4. TypeScript学习指南第一章--基础数据类型(Basic Types)

    基础数据类型(Basic Types) 为了搭建应用程序,我们需要使用一些基础数据类型比如:numbers,strings,structures,boolean等等. 在TypeScript中除了Ja ...

  5. A Tour of Go Basic types

    Go's basic types are bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr ...

  6. 编译器重复定义错误:error C2371: 'SIZE' : redefinition; different basic types

    我们常常会定义自己工程用的数据类型,可能会与Windows的基本数据类型冲突. vs会报重复定义错误:error C2371: 'SIZE' : redefinition; different bas ...

  7. QML学习【一】Basic Types

      QML入门教程(1) QML是什么? QML是一种描述性的脚本语言,文件格式以.qml结尾.语法格式非常像CSS(参考后文具体例子),但又支持javacript形式的编程控制.它结合了QtDesi ...

  8. 【读书笔记】C++ primer 5th 从入门到自闭(一)

    这几天看了C++ primer 5th的一二章,有很多收获,但是有的地方因为翻译的问题也搞得理解起来颇为难受啊啊啊啊.尤其是const限定符,在C语言并没有这么多复杂的语法,在C++里面语法细节就多的 ...

  9. [GraphQL] Use GraphQL's Object Type for Basic Types

    We can create the most basic components of our GraphQL Schema using GraphQL's Object Types. These ty ...

随机推荐

  1. 如何用okr做好目标规划

    有朋友和我吐槽公司总是规划一个个振奋人心的目标,让大家对工作充满了热情.然而好的开头却缺少追踪反馈没有好的结尾,那些大家所渴望达成的目标随着时间的流逝便逐渐没有了音信,不再有人主动提起,团队成员迎来的 ...

  2. 汇编语言中 cs, ds,ss 的区别

    CS(Code Segment):代码段寄存器:DS(Data Segment):数据段寄存器:SS(Stack Segment):堆栈段寄存器:ES(Extra Segment):附加段寄存器.当一 ...

  3. LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力

    二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...

  4. SDSC2019【游记】

    目录 SDSC2019 游记 Day0 Day 1 Day2 Day3 Day4 Day5 Day6 Day 7 Day8 SDSC2019 游记 Day0 这次夏令营在日照某大学举行,我很想夸一夸喷 ...

  5. Zotero使用教程(2)-数据备份

    小书匠 这篇文章的目标是让你无论是 换系统,重新安装zotero等都可以还原回你的文献库,而且整个过程基本是自动完成的. 这部分解决下面的两种情况: 1.zotero有自己既定的一套存储方式,不是一般 ...

  6. 前端微信小程序生鲜类仿爱鲜蜂微信小程序

    需求描述及交互分析设计思路和相关知识点首页界面布局设计闪送超市纵向导航设计商品添加到购物车设计购物车商品显示设计收货地址列表显示设计新增收货地址设计 交互分析(1)底部标签导航有首页.闪送超市.购物车 ...

  7. Cobaltstrike与Metasploit会话转换

    这里只做记录,不做详解 0x00 实验环境 被控制机:192.168.126.129 Metasploit:192.168.126.128 Cobaltstrike:182...* 0x01 CS会话 ...

  8. Shell脚本实现对文件编辑

    常见Linux文件的编辑命令 vi/vim,有时候我们想写一个脚本实现对文件编辑,这个时候,可能就不够用了,下面介绍一些办法 1.echo命令 Shell的echo命令常用于字符串的输出 例如: [r ...

  9. Redis 下载 安装

    Redis 官网 https://redis.io/ github 主页 https://github.com/antirez/redis 下载页面 https://redis.io/download ...

  10. 什么是TCP粘包?怎么解决这个问题

    在socket网络编程中,都是端到端通信,由客户端端口+服务端端口+客户端IP+服务端IP+传输协议组成的五元组可以明确的标识一条连接.在TCP的socket编程中,发送端和接收端都有成对的socke ...