/*______C++全部关键字___________*/ asm do if return try auto double inline short typedef bool dynamic_cast int signed typeid break else long sizeof typename case enum mutable static union catch explicit namespace static_cast unsigned char export new struct using class extern operator switch virtual const false private template void const_cast float protected this volatile continue for public throw wchar_t default friend register true while delete goto reinterpret_cast //C++操作代替名 and bitand compl not_eq or_eq xor_eq and_eq bitor not or xor

以上的关键字太多啦。 但是有些我们都已经很熟悉。 下面是一些不是太常见的关键字的用法:

1。 共用体(union)

struct widget{
char brand[];
int type;
union id
{
long id_num;
char id_char[];
}id_val;
}; widget prize;
if(prize.type==)
cin>>prize.id_val.id_num;
else
cin>>prize.id_val.id_char; //隐式共用体
struct widget{
char barnd[];
int type;
union
{
long id_num;
char id_char[];
};
}; widget prize;
if(prize.type==)
cin>>prize.id_num;
else
cin>>prize.id_char;
//摘自C++ primer plus。P95

共用体常用于(但并非只能用于)节省内存。 另外, 共用体常用于操作系统数据结构或硬件数据结构。

2. 枚举(enum)

enum spectrum{red, orange, yellow, green,
bule, violet, indigo, ultraviolet};
band = blue; //valid, blue is an enumerator.
band = ; //invalid.
//枚举类型仅仅定义了赋值运算符。 int color = bule; //类型转换。
band = ; // invalid, int not converted to spectrum
color = + red //valid, red convertrd to int //省略枚举变量的名称。
enum{red, orange, yellow, green,
bule, violet, indigo, ultraviolet};
//设置枚举变量的值。
enum bits{one=, two=, four=, eight=};
enum bigstep{first, second =, third};
//详见: C++ primer plus 。P97

枚举类型的限制很多,想深入了解, 请看相关的书籍。

3.类型别名 typedef 与 #define , 这两个东东大家都很常用, 我就说一句, 用typedef声明类型别名适用的范围比#define 声明的大些, 你看着办吧!

4. const限定符

用以限定定义后的变量, 即,定义后不再允许修改变量的值。 const double IP = 3.14

(默认状态下, const对象仅在文件内有效!)

初始化和对const的引用:

引用的类型必须与其引用对象的类型一致,但是有两个例外。 第一种情况是初始化常量时允许任意表达式作为初始值,只要该表达式的结果能转化成引用类型即可(可能要通过强制类型转换)。允许为一个常量引用绑定非常量的对象,字面值,甚至是一个表达式。

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

要想理解这种例外情况的原因,最简单的方法是弄清楚当一个变量引用被绑定到另外一种对象类型上时到底发生了什么:

double dval = 3.14;

const int &ri = dval;

此处ri引用了一个int型的数, 对ri的操作应该是整数运算,但dval却是一个双精度浮点数而非整数。因此为了确保让ri绑定一个整数,编译器把上述代码变成了如下形式:

const int temp = dval; //由双精度浮点数生成一个临时的整型变量。

const int &ri = temp; //让ri绑定这个临时量。

所谓的临时量对象就是当编译器需要一个空间来暂存表达式的求值结果时临时创建的一个未命名对象。C++程序员们常把临时变量对象简称为临时量

拓展: 指针与const

指向常量的指针(ponter to const)不能用于改变其所指对象的值。要想存放常量对象的地址,只能使用指向常量的指针。

const double pi = 3.14;//pi是个常量,它的值不能改变
double *ptr = &pi//错误:ptr是一个普通指针
const double *cptr = &pi//正确
*cptr = ; //错误: 不能给*cptr赋值.

const 指针:

指针和其他的对象类型一样,允许把指针本身定为常量。 常量指针(const pointer)必须初始化,而且一旦初始化完成则它的值(也就是存放在指针中的那个地址)就不能再改变啦。 把*放在const关键字之前用以说明指针是一个常量,这样的书写形式隐含着一种意味,即:不变的是指针本身的值而非指向的那个值。

int errNumb = ;
int *const curErr = &errNumb;//curErr将一直指向errNumb
const double pi = 3.14159;
const double *const pip = π//pip是一个指向常量对象的常量指针

constexpr变量:

声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。

constexpr int mf = ;       //20是常量表达式
constexpr int limit = mf+; //mf+1是量表达式
constexpr int sz = size(); //只有当size是一个
//constexpr函数时,才是一条正确的声明语句

尽管不能使用普通函数作为constexpr变量的初始值, 但是新标准允许定义一种特殊的constexpr函数。 这种函数应该足够简单以使得编译时就可以计算其结果,这样就能用constexpr函数去初始化constexpr变量啦。
一般来说,如果你认定一个变量是常量表达式,那就把它声明成constexpr类型。

再学C++之C++中的全部关键字的更多相关文章

  1. 【C】 01 - 再学C语言

    “C语言还用再学吗?嵌入式工程师可是每天都在用它,大家早就烂熟于心,脱离语言这个层面了”.这样说不无道理,这门古老的语言以其简单的语法.自由的形式的而著称.使用C完成工作并不会造成太大困扰,所以很少有 ...

  2. [Python]再学 socket 之非阻塞 Server

    再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...

  3. 再学Java 之 interface的成员变量

    前言:最近在学多线程,写“哲学家就餐问题(Dining Philosophers)”的时候,需要定义一个全局的变量,即哲学家的人数.常用的做法是在其中一个类中定义一个static final的变量,然 ...

  4. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  5. 1145: 零起点学算法52——数组中删数II

    1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 293 ...

  6. 再议Java中的static关键字

    再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...

  7. 沉淀再出发:关于java中的AQS理解

    沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的 ...

  8. vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类

    vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 ...

  9. 再学UML-深入浅出UML类图(三)

    类与类之间的关系(2)       2. 依赖关系  依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系. ...

随机推荐

  1. 战舰的STM32的SPI的逻辑分析仪设置

  2. windows cmd command line 命令

    Reference: 1. http://msdn.microsoft.com/en-us/library/ms977170.aspx(前面有一段VB看不懂没关系) 2. http://csserve ...

  3. 深入理解HTTP协议、HTTP协议原理分析【转】

    转自:http://blog.csdn.net/lmh12506/article/details/7794512 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 基础概念篇 ...

  4. PHP正则表达式的使用

    1. 正则表达式的主要作用是:分割.匹配.查找.替换2. 正则表达式中包括的元素:原子(普通字符:a-z A-Z 0-9 .原子表.转义字符),元字符(有特殊功能的字符),模式修正符(系统内置部分字符 ...

  5. 30、springmvc

    第一章回顾JavaWeb中的MVC设计模式 1)MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域 2)今天说的MVC特指一种表现层设计模式,不限于Java语言 第二章回顾struts ...

  6. [工具][windows][visualStudio][充电]番茄助手vaassist常见用法

    参考:http://blog.csdn.net/hotdog156351/article/details/43955565 1 安装好VAS打开VS2010之后,首先关闭VA outline与VA V ...

  7. 关于MYSQL group by 分组按时间取最大值的实现方法!

    类如 有一个帖子的回复表,posts( id , tid , subject , message , dateline ) , id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联), ...

  8. 多态,虚拟方法,重写,接口,类库,委托,is,as运算符,泛型集合,万能变量

    多态:简而言之就是龙生九子,各有不同 有了继承,才有了多态 1.虚方法 virtual重写 override父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了vir ...

  9. centos 安装smplayer

    安装这个播放器首先得安装第三方插件 1): rpmforge wget  pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el ...

  10. Jquery实现图片上下一张

    注:调试的时候发现ff下有兼容性问题,把jquery换成4.4版本就没问题了,问题应该在e.offseX上ff不支持此属性,以图片中间宽度为界限,鼠标移动在左边点击跳转到一个链接,鼠标移动右边点击跳转 ...