再学C++之C++中的全部关键字
/*______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++中的全部关键字的更多相关文章
- 【C】 01 - 再学C语言
“C语言还用再学吗?嵌入式工程师可是每天都在用它,大家早就烂熟于心,脱离语言这个层面了”.这样说不无道理,这门古老的语言以其简单的语法.自由的形式的而著称.使用C完成工作并不会造成太大困扰,所以很少有 ...
- [Python]再学 socket 之非阻塞 Server
再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...
- 再学Java 之 interface的成员变量
前言:最近在学多线程,写“哲学家就餐问题(Dining Philosophers)”的时候,需要定义一个全局的变量,即哲学家的人数.常用的做法是在其中一个类中定义一个static final的变量,然 ...
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
- 1145: 零起点学算法52——数组中删数II
1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 293 ...
- 再议Java中的static关键字
再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...
- 沉淀再出发:关于java中的AQS理解
沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的 ...
- vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类
vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 ...
- 再学UML-深入浅出UML类图(三)
类与类之间的关系(2) 2. 依赖关系 依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系. ...
随机推荐
- 160914、ionic指令简单布局
1) 添加引用类库(ionic样式和ionic js文件) 2) 标题栏,页脚栏,内容区 3) Js引入ionic类库,添加页面操作方法和对象 4) 数据初始化 5) Html页面绑定方法和对象 &l ...
- SendKeys:基本使用
使用SendKeys将键击和组合键击发送到活动应用程序.此类无法实例化.若要发送一个键击给某个类并立即继续程序流,请使用Send.若要等待键击启动的任何进程,请使用SendWait. 每个键都由一个或 ...
- dom4j读写XML文件
XML文件格式: <?xml version="1.0" encoding="UTF-8"?> <company> <employ ...
- Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
docs.jboss.org文档示例代码:(http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/) sta ...
- Mysql 如何做双机热备和负载均衡
MySQL数据库没有增量备份的机制,但它提供了一种主从备份的机制,就是把主数据库的所有的数据同时写到备份数据库中.实现MySQL数据库的热备份. 下面是具体的主从热备份的步骤:假设主服务器A(mast ...
- ACM学习之路————一个大整数与一个小整数不得不说得的秘密
这个相对于两个大整数的运算来说,只能说是,low爆了. 只要利用好除法的性质,这类题便迎刃而解.O(∩_∩)O哈哈~ //大整数除一个int数 #include<iostream> #in ...
- 【转】Tomcat调优指南
转载地址:http://blog.csdn.net/woohooli/article/details/3954792 1 概述 本文档主要介绍了Tomcat的性能调优的原理和方法.可 ...
- java下载安装,环境变量,hello world
1.Java下载安装 网址:http://java.sun.com/javase/downloads/index.jsp win7 64位选择jdk-8u11-windows-x64.exe. 2.环 ...
- sql查询某条记录
select * from (SELECT t.*,ROWNUM AS RN FROM AWARDISSUE_FOOTBALL t ORDER BY ID DESC) WHERE RN=2
- Unity-Animator深入系列---StateMachineBehaviour初始化时间测试
回到 Animator深入系列总目录 结果和想的有点出入 测试结果: 1.SMB初始化会被调用多次,次数不可控,当Animator组件重复开关则重复初始化. 2.SMB支持构造函数 MyClass p ...