typeid, const_cast<Type>的使用

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 class A {
 5     public :
 6         void Show() {
 7             cout << "A" << endl;
 8         }
 9 } ;
10
11 class CC {
12     public :
13         void Show() {
14             cout << "CC" << endl;
15         }
16 } ;
17
18 class x {
19     public :
20         void Show() {
21             cout << "x" << endl;
22         }
23 } ;
24
25 class {
26 } test;
27
28 int main() {
29     long long a, *b = 0;
30     int *c;
31     double *d;
32     cout << (typeid(a) == typeid(long long)) << endl;
33     cout << (typeid(a) == typeid(double)) << endl;
34     b = &a;
35     cout << (typeid(*b) == typeid(long long)) << endl;
36     cout << typeid(b).name() << endl;
37     cout << typeid(*b).name() << endl;
38     cout << typeid(c).name() << endl;
39     cout << typeid(*c).name() << endl;
40     cout << typeid(d).name() << endl;
41     cout << typeid(*d).name() << endl;
42     A t;
43     cout << typeid(t).name() << endl;
44     CC s;
45     cout << typeid(s).name() << endl;
46     x *p;
47     cout << typeid(p).name() << ‘ ‘ << typeid(*p).name() << endl;
48     class {
49     } temp;
50     cout << typeid(temp).name() << endl;
51     cout << typeid(test).name() << endl;
52     class {
53     } temp2;
54     cout << typeid(temp2).name() << endl;
55     class a {
56     } temp3;
57     cout << typeid(temp3).name() << endl;
58     cout << typeid(long).name() << endl;
59     unsigned long long l;
60     cout << typeid(l).name() << endl;
61     short z;
62     cout << typeid(z).name() << endl;
63     return 0;
64 }

运行结果:

 1 1
 2 0
 3 1
 4 Px
 5 x
 6 Pi
 7 i
 8 Pd
 9 d
10 1A
11 2CC
12 P1x 1x
13 Z4mainEUt_
14 5._125
15 Z4mainEUt0_
16 Z4mainE1a
17 l
18 y
19 s
20
21
22 // 在ubuntu 13.10下的运行结果

const_cast<Type>去除const或volatile限制:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 char *Test(const char *s) {
 5     char *t = const_cast<char *>(s);
 6     *t = ‘z‘;
 7     return t;
 8 }
 9
10 int main() {
11     const char *s1 = "abc";
12     const char s2[] = "cba";
13     //cout << Test(s1) << endl; // Run-Time Error
14     cout << Test(s2) << endl;
15     cout << s2 << endl;
16     //cout << Test("ABC") << endl; // Run-Time Error
17     return 0;
18 }

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 void change(const int *pt) {
 5     int *pc = const_cast<int *> (pt);
 6     *pc = 100;
 7 }
 8
 9 int main() {
10     int pop1 = 18181;
11     const int pop2 = 2000;
12     cout << pop1 << ‘ ‘ << pop2 << endl;
13     change(&pop1);
14     change(&pop2);
15     cout << pop1 << ‘ ‘ << pop2 << endl;
16     return 0;
17 }

——written by Lyon

typeid, const_cast<Type>的使用

时间: 2024-10-28 09:58:33

typeid, const_cast<Type>的使用的相关文章

C++ static_cast const_cast dynamic_cast 和reinterpret_cast的区别

1.static_cast Operator The expression static_cast < type-id > ( expression ) converts expression to the type of type-id based solely on the types present in the expression. No run-time type check is made to ensure the safety of the conversion. Synta

More Effective C++

条款一:指针与引用的区别 指针与引用看上去完全不同(指针用操作符'*'和'->',引用使用操作符'.'),但是它们似乎有相同的功能.指针与引用都是让你间接引用其他对象.你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用.一个引用必须总是指向某些对象.因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量.相反,如果变量肯定指向一个对象,例如你的设计不允许变量为

关于友元函数,运算符重载和类的类型转换

一 关于运算符的重载:运算符中有10种是不可重载的:sizeof static_cast<type>. dynamic_cast<type>.* const_cast<type>:: typeid?= reinterpret_cast<type>有4种是只可以在类中重载的:() [] = -> (1)同时在重载时需要有一个参数是用户自己定义的类成员,否则无法使用 (2)运算符的使用方式,及所需参数个数与重载前所需的参数个数相同 重载的格式: retur

6、SQL Server 数据查询

一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的基本结构 [WITH<common_tale_expression>] SELECT select_list [INTO new_table_name] [FROM table_source][where search_condition] [GROUP BY group_by_expressio

MyBatis入门案例

package com.mybatis.entity; public class User { private Long userId; private String userName; private Integer userAge; private String  userAddress; private Type type; public Long getUserId() { return userId; } public void setUserId(Long userId) { thi

3gcms导航,实现当前栏目高亮的办法

<volist name="menu" id="vo" offset="0" length='8' key='k'> <li class=" <eq name="vo.typeid" value="$type.typeid">curr_menu<else/>not_curr</eq>"> <a href="<

ERP商品管理业务逻辑封装(三十一)

产品购进管理业务逻辑: public class ProductBLL { /// <summary> /// 产品对象添加 并且返回产品编号 /// </summary> /// <param name="viewpro">产品视图对象</param> public int BiotbProductAdd(ViewProInfo model) { int rowsAffected; SqlParameter[] parameters =

effective c++ (一)

条款01:把C++看作一个语言联邦 C++是一种多重范型编程语言,一个同时支持过程(procedural),面向对象(object-oriented),函数形式(functional),泛型形式(generic),元编程(metaprogramming)的语言 1.c part of  C++,c++时以c为基础发展起来的,完全兼容于c语言 2.object-oriented C++,面向对象的封装.继承.多态等三大特性,C++都能够很好支持 3.template C++,使得C++支持泛型编程

PHPCMS常见问题

(1)调用会员头像: {get_memberavatar($r['userid'],1,45)} 只要能够调用到userid,那么这段代码在哪里都可以使用:首页.栏目页.文章页.  这里我就用get来调用member表里面的userid字段. /*这里就可以获取到userid*/ {pc:get sql="select * from v9_member order by regdate desc" num="6"} {loop $data $r}