河南快赢481任二坑死人

词条信息

admin
admin
超级管理员
词条创建者 发短消息   

相关词条

热门词条

更多>>
Word中文字对齐3个超实用的方法!
我们在写毕业论文、写策划方案或者制作简历的时候,文本中的一些特定文字通常需要我们进行对齐。那么现在想问大家...
2019年路由器选购方案大推荐
路由器是个非常简单且有用的数码配件,虽然表面看起来没什么技术含量,但它对我们的日常生活影响是非常大的,重点是很...
如何挑选适合自己的Linux系统版本?
最近很多小伙伴私信我,说想学学Linux,但是由于平时没用过Linux系统,想让小编我帮着推荐一下用哪一个版本...
2019年10大最佳Hyper-V监控工具和软件
虚拟化的广泛使用一直是企业基础架构中最重要的趋势之一。企业通过虚拟化降低与管理和部署硬件设备相关的成本。微软H...
Wi-Fi探针是什么原理 怎么有效防范Wi-Fi探针
在下班回家的路上,你突然接到一个陌生人电话,对方直接说出了你的名字和一些私人信息套了个近乎,然后给你推荐了几个...
河南快赢481任二坑死人 >>所属分类 >> 程序开发    C/C#   

贵州快3走势图跨度: 这些陌生的C++关键字你都搞懂了吗?

河南快赢481任二坑死人 www.p8il.cn 标签: C++

顶[0] 发表评论(0) 编辑词条

学过程序语言的人相信对关键字并不陌生。偶然间翻起了《C++ Primer》这本书,书中列举了所有C++的关键字。


è???o?é????????C++??3é???-??? é?????????o???????




template<typename T, typename Y>完全等价!

第二种情况使用情况比较特殊,简单说起来就是在使用类内成员类型的时候。类内成员类型就是在类定义内声明了一个类型,该类型属于类型内部,可见性由权限访问符限定。


下面就是一个类内的成员类型的声明。


class MyClass

{

public:

 typedef int MyType;

};

类内类型可以像类的静态成员一样使用,例如:


MyClass::MyType var;//定义变量

MyClass::MyType * pvar;//定义指针

typedef MyClass::MyType MyType;//重新命名类型

这些使用方式并没有太大问题,问题可能出现在带有模板的代码中,例如:


template<class T>

void MyMethod( T my )

{

 T::MyType * pvar;

 typedef T:: MyType MyType;

}

函数参数类型来自于模板,如果MyClass对象是实际参数,那么函数内将声明一个MyClass::MyType类型的指针,以及对MyClass::MyType类型重新命名为MyType。由于类内类型使用方式和类成员完全相同,对于第一种语句,可以解释为一个指针声明,也可以解释为一个类成员和变量的乘法操作。第二种语句把T::MyType解释为类型是没有问题的,但是解释为成员变量就产生了错误,因为typedef操作的对象只能是类型。这种二义性对于编译器是不愿意看到的,为了消除这种问题,就可以使用typename进行显示的类型声明。


使用格式:


typename T::MyType * pvar;

typedef typename T:: MyType MyType;

引发这种问题的本质原因来自于模板类型T的不确定性,和直接使用MyClass::MyType不同的是,后者能在编译时期检查出该引用的语法成分。通过typename明确的告诉编译器,这里使用的是类型。这样编译器就明确类型T引出的成员是类型,而不是变量或者函数名。因此,typename的使用范围也被限定在模板函数内部。


其实这些问题在目前的编译器中并不存在,使用VC6.0和VS2010测试发现,无论是否加上typename程序都不会出错。对该关键字的保留大概是为了兼容旧式编译器的代码。关于typename的用法读者感兴趣可以点击参考链接。


{

 mutable int member;

 void constFun()const

 {

 member=0;

 }

};

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


{

public:

 A(int x)

 {

 }

};

void fun(A a)

{

}

fun(1);

最后的函数调用语句是合法的,虽然fun只接受A类型的参数,但是因为A的构造函数除了初始化A外,还提供了整数转换为A类型的方式——转换构造函数。但是有些情况下,这样做可能是不利的,比如fun可能有单独处理整形参数的重载,或者fun根本不需要转换构造函数生成的对象。


使用格式:


explicit A(int x)

{}

通过使用explicit限制构造函数必须是显式调用,禁止隐式类型转换就可以按照程序作者的需要限定构造函数的功能。


六、static_cast、const_cast、dynamic_cast、reinterpret_cast

之所以把这四个关键字放在一起,是因为它们处理相似的问题——显式类型转换。C++延续了C风格的强制类型转换的语法:


(类型)表达式


但是C风格的转换具体很大的风险性,为此,C++支持四种关键字对不同形式的类型转换进行分别处理。


使用格式:


转换关键字<类型>(表达式)


static_cast和C风格类型转换功能完全相同,它属于在编译时期静态的类型转换。如果把一个double类型转换为整形,形式如下:


static_cast<int>(0.1);

static_cast功能有所限制,比如不能转化struct类型到int,不能转化指针到double等。另外,它不能在转换中消除const和volatile属性。


const_cast用于消除引用或者指针的const或者volatile属性。


const int &ci=100;

int &i=const_cast<int&>(ci);

通过这种方式,ci引用的内存单元虽然无法通过修改ci改变,但是可以修改i改变内存的值。这里是把const属性消除,这里想多说一点的是把const加上的问题。例如:


int x=100;

const int &cx=x;

const int &cy=x+1;

对const对象的引用允许使用表达式初始化,比如cy引用的内存单元的值应该就是x+1的值即101。正因为此《C++ Primer》也假设了编译器了的工作方式:


int temp=x+1;

const int &cy=temp;

如果按照这种工作方式,cx引用的内存单元应该不是x的内存单元,但是在VS2010下测试结果表明cx和x的地址为同一内存单元!


{

 virtual void fun(){};//必须拥有虚函数

};

class A:public Base//必须是供有继承才能默认转换

{

};

Base b;

A *a=dynamic_cast<A*>(&b);//基类到子类,显式转换

Base*pb=a;//子类到基类,默认转换

reinterpret_casts一般用作函数指针的转换,而且使用它的代码可移植性很差,因为无法确定编译器的函数调用方式等。有可能会导致函数调用出错,一般不常用。例如:


typedef void (*FuncPtr)();//funcPtr是指向无参无返回值类型函数的指针

int func()//一个无参返回整数的函数定义

{

 return 0;

}

FuncPtr pf=reinterpret_cast<FuncPtr>(func);

直接把func赋值给pf是不行的,使用reinterpret_cast将函数指针强制转换即可。


至此,我们把那些陌生的C++关键字的“老底”摸了个遍,相信以后应该不会再碰到搞不清楚的C++关键字了,希望本文对你有所帮助!

 

 

附件列表


按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

→我们致力于为广大网民解决所遇到的各种电脑技术问题
 如果您认为本词条还有待完善,请 编辑词条

上一篇国内外优秀DNS推荐
下一篇如何让浏览器主页永远不被篡改

0
1. 本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
2. 本站内容仅供参考,如果您需要解决具体问题,建议您咨询相关领域专业人士。
3. 如果您没有找到需要的百科词条,您可以到百科问答提问或创建词条,等待高手解答。

关于本词条的提问

查看全部/我要提问>>
  • “煤老大”渐行渐远 新动能清风徐来 山西抓紧资源型经济转型 2019-03-14
  • 只有资本主义会关门,社会主义,有无穷的爆发力 2019-03-14
  • 新华时评:美逆潮流而动 必将付出代价 2019-03-04
  • 河南一矿企收33张罚单仍违法排污 有基层官员站台 2019-03-04
  • 股市涨跌都正常,但不能允许欺诈,反正欺诈发现了,国家可以罚款,但股民就白损失了,这是什么规矩? 2019-02-24
  • 浙江现奇葩“失恋展” 2019-02-15
  • 财报看车企:哈弗H8能否重振长城股价 2019-02-07
  • 方言报站也是一种有意义的尝试 2019-01-20
  • 申纪兰:人民代表就要代表人民 2019-01-17
  • 广州计划于7月6日公布中考成绩 8日开始录取 2019-01-08
  • 广安华蓥山区山水林田湖草生态保护修复项目科学有序规范高效推进 2018-12-09
  • 激情世界杯熬夜看球 谨防泌尿疾病“亮红牌” 2018-12-04
  • 美联储加息后市场观望气氛浓 美国经济存变数 2018-12-02
  • 解放军报评论员:不负人民重托 担起历史使命 2018-11-27
  • 日本民族将会为最终拥核而战日本民族是一个善于抓着机会和求胜欲极强的民族,其是不会轻易让别人将其变强的机会夺走!为此,与美国翻脸都有可能!(原创首发) 2018-11-27
  • 652| 378| 430| 598| 891| 735| 287| 106| 54| 908|