/*______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. 为该目录以及子目录添加index.html

    add index.html to a directory recursively using Perl5 使用的目录,是从Perl下载的perl5.18.2的文档 Look Here #!/usr/ ...

  2. string转换成color转

    string转换成color             string col = "#FF8400";            this.BackColor = System.Draw ...

  3. WMsg参数常量值

    //WMsg参数常量值: //创建一个窗口 const int WM_CREATE = 0x01; //当一个窗口被破坏时发送 const int WM_DESTROY = 0x02; //移动一个窗 ...

  4. quick lua目录结构

    http://cn.cocos2d-x.org/tutorial/show?id=1138 http://cn.cocos2d-x.org/tutorial/show?id=2385

  5. 【转】Cookie和Session的区别详解

    转载地址:http://www.phperzone.cn/portal.php?aid=541&mod=view 一.cookie机制和session机制的区别 具体来说cookie机制采用的 ...

  6. 过滤器Filter(拦截jsp页面的跳转)案例:

    创建一个 Filter , class类: 其继承于 接口 Filte(接口导包:import javax.servlet.Filter;) 在 web.xml 文件中配置并映射该 Filter. 其 ...

  7. 20150812 Asp.net 父窗体获取子窗体的返回值,更新父窗体文本控件(应用)

    1. 父窗体 **************************************** using System;using System.Collections;using System.C ...

  8. Code(组合数学)

    Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8766 Accepted: 4168 Description Tran ...

  9. 零零碎碎写的shell脚本(三):一键自动归档压缩脚本

    #!/bin/bash # author by sysk read -p "There files: " FILE1 FILE2 FILE3 read -p "Desti ...

  10. IOS时间戳

    什么是时间戳? 时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间.数字时间戳技术是数字签名技术一种变种的应用. 思考:简单来讲就是根据文件hash加密后生成的摘要和时间生成的时 ...