在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.typeid. typeid表达式形如:typeid(expr)这里expr是任意表达式或者类型名。如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算(编译器需要/GR支持);否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。 typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义)。标准并没有确切定义type_info,它的确切定义编译器相关的,但是标准却规定了其实现必需提供如下四种操作:
注意:当把typeid作用于指针的解引用*p时,若指针p为0,则:如果p指向的类型是带虚函数的类类型,则typeid(*p)在运行时抛出一个bad_typeid异常;否则,typeid(*p)的结果与p的值是不相关的,在编译时就可以确定。typeid表达式的这点性质与sizeof表达式相似但又有区别,sizeof一定是在编译时进行计算,也就是说,其只考虑表达式的静态类型,与表达式的动态类型无关(即使有虚函数存在)。 2.mutable: 这个是相对与const而言的,如果一个变量被声明为const,一般情况下那么这个变量的内容是不可更改的,但是用mutable修饰后,那么这个变量的const的属性就没有,和普通的变量就没有什么区别了,可以在任何地方被修改。 class Test2 4.const_cast const_cast把常量强制转换为非常量,或者把volatile转换成非volatile类型的。eg. const int a = 10; 5.volatile volatile英文翻译过来的意思是“易变的,反复无常的”,是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。 6.explicit explicit意思是显式的。只能用在构造函数前面,并且一般是单参数的构造函数,或者有多个参数但仅有一个参数没有默认值.被explicit修饰的构造函数表明是显式的,既然有显式的,那么肯定有隐式的了,先说一说隐式的构造函数。 class Test 如果我们这样用,Test t(3) ;t = 10;那么在t=10这个语句中,就用到了隐式转换,编译器会这样解释,Test temp(10),t = temp,也就是说其中生成了一个临时变量。这就是隐式转换。如果我们有这样的一个函数 int f(const Test &t),调用的时候f(3),一不小心我们还会以为,f里的参数是int型的呢,为了防止这种隐式转换,就用到了explicit,在构造函数前面加上explicit就可以防止这种隐式转换。 7.__super Allows you to explicitly state that you are calling a base-class implementation for a function that you are overriding. __super can only appear within the body of a member function. __super cannot be used with a using declaration. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论