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. LeetCode 845. Longest Mountain in Array

    原题链接在这里:https://leetcode.com/problems/longest-mountain-in-array/ 题目: Let's call any (contiguous) sub ...

  2. 指数基金介绍专栏(4):上证50AH优选指数

    作者:牛大 | 公众号:定投五分钟 大家好,我是牛大.每天五分钟,投资你自己:坚持基金定投,终会财富自由! 想必大家会有疑问,什么是上证50AH优选指数?今天老师给大家答疑解惑,详细介绍一下上证50A ...

  3. POJ P2251 Dungeon Master 题解

    深搜,只不过是三维的. #include<iostream> #include<cstring> #include<cstdio> #include<algo ...

  4. 2019.12.11 java练习

    class Demo01 { public static void main(String[] args) { //数组求最大值 int[] arr={1,2,3,4,5,6,7,8,9}; int ...

  5. dinoql 使用nodejs 运行的几个问题

    dinoql 是一个很不错的javascript objects 查询处理方案,基于graphql,当前版本有点问题 node 环境运行 ReferenceError: window is not d ...

  6. 25-ESP8266 SDK开发基础入门篇--控制WIFI连接路由器

    https://www.cnblogs.com/yangfengwu/p/11324411.html 说个事情,现在SDK的版本已经出到3.0了,但是我还是使用2.0 如果只是为了学习研究   选择3 ...

  7. PHP全栈学习笔记33

    javascript能做什么? 语句与注解,标识符,字面量,变量命名规范 JavaScript中的数据类型,其它类型如何转为数据型,操作符 字符方法,数组方法,函数与对象,函数表达式,变量作用域,对象 ...

  8. Linux 上配置 AG

    SQL Server Always On Availability Group 配置步骤:配置三台 Linux 集群节点创建 Availability Group配置 Cluster Resource ...

  9. 百度编辑器(ueditor)踩坑,图片转存无法使用

    在使用 百度编辑器 的过程中碰到了一些问题,图片转存功能无法使用, 即便是疯狂地在官方 Demo.文档.论坛甚至是 GitHub 上也没找到理想的答案.(┗|`O′|┛) (真是日了狗) 问题描述 默 ...

  10. 20189220 余超《Linux内核原理与分析》第一周作业

    实验一 Linux系统简介 通过实验一主要是学习到了Linux 的历史简介,linux与windows之间的区别,主要是免费和收费,软件和支持,安全性,使用习惯,可制定性,应用范畴等.linux具有稳 ...