一些罕见的c++关键字

一、Typeid
Typeid是一个类型运算符,用于获取某个变量或者类型的名字。
使用格式:typeid(int)或typeid(i+1)
例如:
typeid(double).name();//获取int类型名,结果为“double”。
typeid(2)!= typeid(2.0);//比较表达式类型,结果为true。


二、Mutable
Mutable的含义是可变的,和const关键字相对,用于修饰常成员函数,告知编译器可以修改这个变量。
使用格式:mutable int var;//类内声明
例如:
class MyClass
{
     mutable int member;
     void constFun()const
     {
         member=0;
     }
};


三、Volatile
Volatile的意思是易变的,编译器在编译时期可能不能获取变量是否被多个线程或者进程修改的信息,用于确保一个变量被多个线程操作的原子性。
使用格式:
volatile int a;


四、Explicit
Explicit的含义是显式的,它和C++中的隐式转换相关。例如:
double a=100;
编译器会自动将整数100转化为浮点类型。对于用户数据类型,C++提供了转换构造函数和类型转换函数实现用户数据类型和内置类型的相互转换,而explicit是因为转换构造函数而存在的。下面给出一个转换构造函数的例子:
class A
{
public:
       A(int x)
       {
       }
};
void fun(A a)
{
}
fun(1);
最后的函数调用语句是合法的,虽然fun只接受A类型的参数,但是因为A的构造函数除了初始化A外,还提供了整数转换为A类型的方式——转换构造函数。但是有些情况下,这样做可能是不利的,比如fun可能有单独处理整形参数的重载,或者fun根本不需要转换构造函数生成的对象。


五、Likely和Unlikely
Likely() 与 Unlikely()是linux内核中定义的两个宏。用于人为告诉编绎器一些分支预测信息“exp==c”是很可能发生的”。likely,执行if后面语句的可能性大些,编译器将if{}是的内容编译到前面;使用unlikely,执行else后面语句的可能性大些,编译器将else{}里的内容编译到前面。这样有利于cpu预取,提高预取指令的正确率,因而可提高效率。
例如:
if(likely(foo))  //认为foo通常为1
if(unlikely(foo)) //认为foo通常为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值