第2章 基本类型

1.算术类型

  • 宽字符和unicode
wchar_t         宽字符         16位
char16_t        unicode       16位
char32_t        unicode       32位
  • 字符型

    char/signed char/unsigned char
    char 和signed char并不相同,但三者只表现为有无符号两种情况
    
  • 赋值超出范围问题

    • 当给无符号整数类型赋值时,若超出表示范围,结果为初始值对无符号类型的表示数值总数取模
    • 若给有符号类型超出范围,则是未定义,可能引发程序崩溃
  • 不要将无符号和有符号数混用

    • 当一个算术表达式中既含有无符号数,有含有int类型时,int将会转换为无符号数,这样会引发一些问题。

      unsigned u=10;
      int i=-42;
      cout<<u+i<<endl     //结果将是一个很大的数,因为i被转换为无符号数了
      ...
      for(unsigned index=5;index>=0;--index)
      {
          //do something
      }
      ...
      //这将会是一个死循环,index永远都大于0
      

2.字面值

  • 整数的字面值的类型为 int long long long中能容纳该值的最小类型
  • short类型无对应的字面值
  • 字面常量不存在负数,符号只是代表取负值,而不在字面值之内

3.初始化、声明、定义

  • 初始化方式

    int a={0};
    int b{0};
    //上述为列表初始化
    int c(0);
    
  • 声明、定义

    extern int i;     //只声明
    int j;                //声明并定义
    extern double pi=3.14;    //定义
    
  • 引用

    • 引用不是对象,不能被引用
    • 绑定后不能再绑定其他对象
  • 指针

    //指向指针的引用
    int *p;
    int *&r=p;    //从右向左解释,r是一个引用,引用的对象是一个int类型的指针
    

4.const 限定符

  • 一些注意点

    • 必须初始化
    • 默认状态下,const对象仅在文件内有效,在不同文件中使用时,需要分别定义
    • 当要多文件共享const对象时,不管声明还是定义,都加上extern
  • 常量引用

    const int ci=1024;
    const int &r1=ci;     //正确
    int &r2=ci;               //错误,r2不是常量引用,会通过r2修改ci的值
    
  • 初始化常量引用时允许用任意表达式作为初始值

    int i=42;
    const int &r1=i;      //正确
    const int &r2=42;     //正确
    const int &r3=r1*2;       //正确
    int &r4=r1*2;         //错误
    ...
    double dval=3.14;
    const int &ri=dval;
    //等价于下方
    const int temp=3;
    const int &ri=temp;
    //绑定的是一个临时变量
    
  • const的引用可能引用一个并非const的对象

    int i=42;
    int &r1=i;
    const int &r2=i;
    //虽然不能通过r2来修改i的值,但是可以通过r1修改
    
  • 指针与const

    • 存放常量对象地址,只能用常量指针

    • 允许一个指向常量的指针指向一个非常量对象(仅要求不能通过该指针来修改对象的值,而可以通过其他方式修改)

    const int *p 与 int *const p 的区别
    //从右向左解释
    int *const p;
    // 变量 p 是一个常量,其类型由剩余部分决定,其是一个指针,指向int类型,故其为一个指向int类型的常量指针
    const int *p;
    //变量 p 是一个指针,指向int 类型常量
    
  • top-level const & low-level cosnt

    • 顶层const:指针本身是一个常量
    • 底层const:指向的对象是一个常量
    • 当执行对象拷贝时,拷入和拷出的对象必须具有相同的底层const资格

5.别名、auto、decltype

  • 别名

    typedef A double
    using A=double;
    
  • 指针、常量、别名

    typedef char *pstring
    const pstring cstr=0;     //是一个指向char的常量指针
    const pstring *ps;            //ps为指针,指向的对象是指向char的常量指针
    
  • auto

    • 会忽略顶层const,保留底层const

      int i=0;
      const int ci=i,&cr=ci;
      auto b=ci;          //b为int 类型
      auto c=cr;          //cr是ci的别名,ci是顶层const,所以忽略,c为int 
      auto d=&ci          //d指向整数常量的指针,保留底层const
      
  • decltype

    • 如果decltype使用的表达式是一个 【变量】时,则decltype返回改变量的类型

    • 若是一个表达式,则返回结果类型

      int i=42,*p=&i,&r=i;
      decltype(r+0) b;    //int
      decltype(*p) c;     //*p的解引用是【int&】,引用需要初始化,所以错误
      
    • decltype的表达式若是加上了( )的变量,结果将是引用

6.头文件保护符

#ifndef
#define
...
#endif
//防止头文件多次包含
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 把一个值赋值给一个无符号 类型的变量的时候,如果该值超过了该变量能够表示的范围,那么结果就是该变量获得了该值经过对...
    修司敦阅读 639评论 0 0
  • 初始化与赋值初始化的含义是创建变量的时候赋予其一个初始值,赋值的含义是把对象的当前值擦除,而以一个新值来替代。列表...
    KevinCool阅读 250评论 0 0
  • C++中变量以及基本类型 内置类型包括:字符,整型,浮点型等;同时C+还支持更加复杂的数据类型,首先来看看基本的内...
    秋风弄影阅读 683评论 0 1
  • #1.基本内置类型1.1 算术类型1.2 类型转换1.3 字面值常量 #2.变量2.1 变量定义2.2 变量定义和...
    MrDecoder阅读 507评论 0 2
  • 基本内置类型 算术类型字符整型布尔值浮点数 空类型(void) 算术类型 带符号类型和无符号类型int、short...
    2625K阅读 3,183评论 0 1