/*______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类型。

最新文章

  1. ubuntu14.04 安装pip
  2. java计算组合数
  3. linux gitlab nginx 安装 配置
  4. 扩展duilib edit控件的提示功能和多种文字颜色(解决edit为password显示不正常的bug)
  5. HttpApplication事件执行顺序(转)
  6. ZigBee 协议规范
  7. Java Socket聊天室编程(二)之利用socket实现单聊聊天室
  8. 网络克隆 主要是 PXE网卡启动 随笔
  9. Day7:html和css
  10. google colab 使用指南
  11. 个人博客添加网易云音乐Flash插件
  12. 【移动端 Web】怎么循序渐进地开发一个移动端页面
  13. 安装caffe-ssd或者caffe时make all,make pycaffe,make test运行慢的问题
  14. dubbo rpc调用,接收到的bean为null原因?
  15. QT 小总结
  16. 启动与关闭comcat服务器
  17. AngularJS + CoffeeScript 前端开发环境配置详解
  18. IntentService的用法,对比Service它会按顺序执行,不会像Service一样并发执行。
  19. redhat配置java环境
  20. jquery的html代码中a的onclick的正确显示的代码

热门文章

  1. 161118、linux(centos) 项目部署阶段相关命令汇总
  2. scala简单的文件操作
  3. BZOJ 1588:营业额统计(Splay)
  4. php中的curl】php中curl的详细解说
  5. java 面试每日一题6
  6. c#对话框
  7. sp_sys_ERPTrigger_base
  8. Fishnet(暴力POJ 1408)
  9. Children of the Candy Corn 分类: POJ 2015-07-14 08:19 7人阅读 评论(0) 收藏
  10. 同一服务器部署多个tomcat时的端口号修改详情