C/C++重难点解析

C++重难点解析之关键字 (一)

本文将对以往学习过但概念容易混淆,又特别重要的C++关键字进行回顾。本系列文章的之后篇幅分别对C++中的比较重要的知识点进行详细的总结。

1、const关键字
const通常用来限定变量,使其不能被改变,在C++中这种被const修饰的变量称为常量。当const与其他概念相结合时情况将变得复杂。
const与引用
在C++中可以声明const引用:

const Type & name = var;

const引用让变量拥有只读属性。
当使用常量对const引用进行初始化操作时,C++编译器会为常量分配空间,并将引用名作为这段空间的别名。
const引用的几种典型用法:

int a = 4;
const int &b = a;
int *p = (int *)&b;
b = 5;   //错误
*p = 5//正确
int i = 5;
const int &a = i;  //允许将const int&绑定到一个普通int对象上
const int &b = 5;  //正确:a是一个常量引用
const int &c = a * b;  //正确:c是一个常量引用
int &d = a * 2;    //错误:d是一个普通的非常量的引用

const与指针
const常量与指针操作符的先后对指针变量值的可变性有影响,总结来说遵循“左数右指”的原则。

const int* p;          //p可变,p指向的内容不可变
int const* p;          //p可变,p指向的内容不可变
int* const p;          //p不可变,p指向的内容可变
const int * const p;   //p不可变,p指向的内容不可变

当const出现在 * 左边时指针指向的数据为常量
当const出现在 * 右边时指针本身为常量

const与类的成员变量,成员函数,对象
类中的const成员会被分配空间
类中的const成员的本质是只读变量
类中的const成员只能在初始化列表中指定初始值
编译器无法直接得到const成员的初始值,因此无法进入符号表成为真正意义上的常量
cosnt关键字可以修饰类的对象
const修饰的对象为只读对象
只读对象的成员变量不允许被改变
只读对象是编译阶段的概念,运行时无效
const对象只能调用const成员函数
const成员函数不能直接改写成员变量的值
const成员函数的定义:

Type className :: function(Type p)const

目前只想到这些,如有遗漏之后再补。

2、volatile关键字
volatile通常在嵌入式中应用较多,被volatile修饰的对象禁止编译器对其进行优化,它的用法与const相似。可以声明volatile指针,指向volatile对象的指针,指向volatile对象的volatile指针:

volatile int v;
int *volatile i;
volatile int *ivp;
volatile int *volatile p;

int *a = &v;            //错误:必须使用指向volatile的指针
ivp = &v;               //正确:ivp是一个指向volatile的指针
p = &v;                 //正确:p是一个指向volatile的volatile指针

与const一样,只能将一个volatile对象的地址(或拷贝一个指向volatile类型的指针)赋给一个指向volatile的指针。同时,只有当某个引用是volatile时,才能使用一个volatile对象初始化该引用。

你可能感兴趣的:(C/C++)