Chinaunix首页 | 论坛 | 博客
  • 博客访问: 357209
  • 博文数量: 94
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 606
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-30 08:58
个人简介

x

文章分类

全部博文(94)

文章存档

2019年(4)

2018年(10)

2017年(26)

2016年(38)

2015年(16)

我的朋友

分类: C/C++

2017-02-28 16:43:02

1.指针常量与常量指针
规则:* (指针)和 const(常量) 谁在前先读谁 ;*象征着地址,const象征着内容;谁在前面谁就不允许改变。
int const *p; -- 常量指针,同下
const int *p; -- 常量指针,指针指向的内容不能修改
int *const p; -- 指针常量,指针本身的内容不能修改,即指向不能修改

2.顶层const与底层const
概念:指针本身是不是常量 和 指针所指的是不是一个常量 是两个相互独立的问题
顶层const:指针本身是个常量
底层const:指针所指的对象是个常量
当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换。一般来说,非常量可以转换为常量,反之则不行。

3.constexpr与常量表达式
const int *p = nullptr;            // p是一个指向整型常量的指针
constexpr int *q = nullptr;      // q是一个指向整型的常量指针

3.引用的定义
1)允许一条语句能定义多个引用,引用标识符前必须以&开头;    
    int &r1 = a;
2)引用不是对象不能定义引用的引用;  
    int a = 10;
    int &r1 = a;
    int &r2 = &r2;     // 错误
3)引用必须被初始化,且必须是一个对象;   
    int &r1;错误      
    int &r2 = 10;       // 错误
4)引用类型必须与内引用对象类型一致
    double d = 3.14;
    int &r = d;           // 错误
5)指向指针的引用
    int i = 42;
    int *p = &;
    int *&r =p;          // 离变量名最近的符号对变量的类型有最直接的影响,因此r是一个引用。
6)对常量的引用   
    const int ci = 1024;
    const int &r1 = ci;

    int i = 42;
    const int &r2 = i;  // 正确,允许将const int& 绑定到一个普通int对象上
    int &r3 = r2;        // 错误,r3是一个普通的非常量引用

    double d = 3.14;
    const int &r4 = d; // 错误,r4引用类型和被引用变量类型不一致
    const int &r4 = d; // 正确,r4会引用到一个临时变量上,由编译器完成
    即:const int temp = d; const int &r4 = temp;


阅读(827) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~