C/C++中的关键字如下:

下面我们主要介绍一些比较陌生的关键字,一些常见的关键字这里就不再赘述了。

1、asm

asm是一个语句的分隔符,不能单独出现,必须接汇编指令。一组被大括号包含的指令或一对空括号。示例如下:

_asm
{mov al,2mov dx,0xD007out al,dx
}

也可以在每个汇编指令前加_asm:

_asm  mov al,2
_asm  mov dx,0xD007_asm  out al,dx

2、catch、throw、try

用于异常处理。try指定try块的起始,try块后的catch可以捕获异常。异常由throw抛出。throw在函数中还表示动态异常规范。示例如下:

try
{//可能出异常的程序
}
catch(表达式)
{throw ...
}

3、auto

auto关键字会根据初始值自动推断变量的数据类型。但不是每个编译器都支持auto。示例如下:

auto  x = 7;  //使用整数7对变量x进行初始化,可推断x为int型。
auto  y=1.234;  //使用浮点数1.234对变量y进行初始化,可推断y为double型。

4、*_cast

即 const_cast、dynamic_cast、reinterpret_cast、static_cast。

C++类型风格的类型转换符。const_cast删除const变量的属性,方便赋值;dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引用;reinterpret_cast将一种类型转换为另一种不同的类型;static_cast用于静态转换,任何转换都可以用它,但他不能用于两个不相关的类型转换。

注:具体使用可以参考我的另一篇博客:C++中的四种强制类型转换符详解

5、typeid

从名字直观看来,该关键字应该是获取语言元素的类型ID。有时候代码可能需要获取某个变量或者类型的名字,这时候使用typeid就比较合适。示例如下:

typeid(int).name(); //获取int类型名,结果为“int”
typeid(1)!= typeid(1.0); //比较表达式类型,结果为true

6、typename

typename在函数模板和类模板声明中使用。一般模板声明中,使用class关键字指定类型参数,后来C++支持使用typename代替class关键字。这里typename和class没有任何区别。示例如下:

template<class  T, class Y>;
//可以用下面替代
template<typename  T, typename Y>

7、mutable

Mutable的含义是可变的,它和const关键字是相对的。我们知道类的常成员函数在语义上是不允许修改类的成员变量的,但是有时候可能根据代码的需要并不是这么绝对。那么就可以使用mutable声明一个类的成员变量,它告诉编译器类的常成员函数可以修改这个变量。示例如下:

class MyClass
{mutable int member;void constFun()const{member=0;}
};

如果不使用mutable修饰member定义,就会编译报错。

8、explicit

explicit的含义是显式的,该关键字的作用就是阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。

在C++中,如下声明是合法的:

class String
{String(const char* p);
};String s1 = "hello"; //合法

上例中,String s1 = "hello"会执行隐式转换,等价于String s1 = String("hello")。为了避免这种情况的发生,可以在函数声明前面加上explicit,禁止隐式类型转换。示例如下:

class String
{explicit String(const char* p);
};String s1 = "hello"; //非法报错

9、export

使用该关键字可实现模板函数的外部调用。对模板类型,可以在头文件中声明模板类和模板函数;在代码文件中,使用关键字export来定义具体的模板类对象和模板函数;然后在其他用户代码文件中,包含声明头文件后,就可以使用该这些对象和函数。

10、operator

和操作符连用,指定一个重载了的操作符函数,比如,operator ++。示例如下:

class Time
{
public://重载后缀递增运算符( ++ )//后置递增就是增加当前对象的值,并且返回增加值之前的该对象Time operator ++(int){Time origin = *this; //保存原先未改变的对象second++;return origin;}private:int second;
};

11、volatile

volatile是易变的意思,编译器在编译时期可能不能获取变量是否被多个线程或者进程修改的信息。这时候一个变量是否在两次“读操作”之间发生改变,编译器肯定无法确定。然而编译优化的技术针对一般的变量都会做出优化,例如:

int a=0;
int b=a;
int c=a+1;

编译器极可能把a放在寄存器中,供b,c的计算使用。更有甚者,编译器确定a的值是0,会直接计算出b=0,c=1!如果在实际运行中a的值被其他线程修改,这么做就改变了代码的语意。为了消除这种问题,使用volatile关键字告诉编译器每次访问a的时候都需要读内存,而不对其优化。

参考:

那些陌生的C++关键字

C++关键字详解

转载于:https://www.cnblogs.com/linuxAndMcu/p/11189574.html

那些陌生的C++关键字相关推荐

  1. 转FLORIAN大神blog之 -那些陌生的C++关键字

    http://www.cnblogs.com/fanzhidongyzby/archive/2012/11/07/2759326.html 学过程序语言的人相信对关键字并不陌生.偶然间翻起了<C ...

  2. 万字长文详细搞懂 volatile 关键字

    volatile 这个关键字大家都不陌生,这个关键字一般通常用于并发编程中,是 Java 虚拟机提供的轻量化同步机制,你可能知道 volatile 是干啥的,但是你未必能够清晰明了的知道 volati ...

  3. Java多线程编程那些事:volatile解惑--转

    http://www.infoq.com/cn/articles/java-multi-thread-volatile/ 1. 前言 volatile关键字可能是Java开发人员"熟悉而又陌 ...

  4. 滴滴java开发面试题_滴滴java开发工程师面试问题解答(第一回)

    有位同学写了一个滴滴面试拿offer的经历,据说还面了滴滴的CTO,我就好奇,这CTO面又能是个啥水平呢?对他在文章中提到的部分问题做个解答吧. 原文请见滴滴CTO五轮面试真是太刺激了,Java高级工 ...

  5. 浅谈Java中的final关键字

    浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  6. 浅析Java中的final关键字

    浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  7. java volatile 用法_java关键字volatile用法详解

    volatile关键字想必大家都不陌生,在java 5之前有着挺大的争议,在java 5之后才逐渐被大家接受,同时作为java的关键字之一,其作用自然是不可小觑的,要知道它是java.util.con ...

  8. python中全局变量和局部变量关键字_Python中全局变量和局部变量的理解与区别

    前言 学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念 但是与其他编程语言又有所不同 全局变量与局部变量两者的本质区别就是在于作用 ...

  9. JMM中的原子性、可见性、有序性和volatile关键字

    相信如果对JMM底层有过了解或者接触过java并发编程的读者对以上的概念并不陌生,但是真正理解的可能并不多.这里我就对这些概念再做一次讲解.相信读者多读几遍应该就有自己的理解,实在不理解也没关系,说明 ...

最新文章

  1. 集成模型Xgboost!机器学习最热研究方向入门,附学习路线图
  2. 如何在 Janus 中获取 WebRTC 的流
  3. Maven本地库在哪?
  4. tensorflow学习(1.CNN简单实现MNIST)
  5. 5分钟看懂微服务架构下的Consul 特性及搭建
  6. 【渝粤教育】国家开放大学2018年春季 0529-22T高级英语阅读(1) 参考试题
  7. Vue 2.x 文件夹目录
  8. android系统 wifi,Android系统wifi分析-手动连接过程
  9. 路直路弯,面对挫折脚步不放慢
  10. jmeter接口顺序执行_【接口测试】JMeter中各组件执行顺序详解
  11. 你见过哪些操蛋的代码?切勿模仿! 否则后果自负
  12. Understand Java hasCode() method
  13. ibm刀片服务器虚拟化,刀片服务器内置虚拟化 IBM升级服务器
  14. 抽象代数的代码实现(1) 置换群
  15. abs链目前在哪个平台_ABS链怎么样?
  16. 单位圆的面积为π,因此可以通过求单位圆面积的近似值来求π的近似值
  17. Cantor 表 {C语言解法}
  18. phpyun修改userlist标签
  19. C++题解:幼儿园买玩具
  20. MixMatch、UDA、ReMixMatch、FixMatch

热门文章

  1. 【计算机网络】深入浅出网络层(看不懂你来打我.上)
  2. Android四种启动模式
  3. c# mysql 编码_C#编码问题以及C#往Mysql插数据编码问题
  4. java不能修改表_java中不可修改列表的类型是什么
  5. 外包网络推广公司浅析网站如何通过修改网站标题来提升排名?
  6. 让关键词排名更稳定提升的优化技巧有哪些?
  7. php excel 组件,Yii Framework框架使用PHPExcel组件的方法示例
  8. python基础网易_十年Python大牛花了三天总结出来的python基础知识实例,超详细!...
  9. bootstraptable获取所有数据_一键获取oracle用户下所有表的表名与其数据量
  10. 开发日记-20190717 关键词 读书笔记 《Perl语言入门》Day 11