欢迎来到天天文库
浏览记录
ID:33823349
大小:262.50 KB
页数:6页
时间:2019-03-01
《标准c++编程常量_指针_new_delete_函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、constdouble*p;double*constp1;constdouble*constp2;有什么区别?constdouble*p;//*p是个const,意思是不能通过*p修改p指向的对象比如doublea=0.0;constdouble*p=&a;那么*p=2.0是非法的而如果有constdoublea=0.0;那么必须是constdouble*才可以指向a,像double*p=&a;是非法的double*constp1;//p1是个const,p1的值不能改变,所以必须在定义p1的时候就初始化它:double*constp1=&某;如果再有p1=某地址;//这个就行不通const
2、double*constp2;//p2是个const,*p2也是const,就是p2的值不能改变,也不能通过*p2改变p2所指向的对象的值一道C语言的例题:在C语言的编译下,由于指针指向的地址,直接向地址修改值,导致值被修改。然而这段程序,在不修改程序代码的情况下,使用C++进行编译,由于C++的编译器做了大量的优化工作,而直接导致值为100.优化工作为程序看到n的前面使用const做修饰,直接认为n为常量,在接下来使用n的地方,直接使用这个值代替,而不直接再从内存中n的地址处再取一遍n的值,所以我们看到的就是100.那么我们要怎么样才能使n的值从地址处再取一遍呢?volatile的作用:作
3、为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。上面的例题只是想说明C++会对常量进行优化,直接使用值进行代替,而不再去内存中取变量值。强制类型转换在C语言中强制类型转换很常见,但是在C++中强制类型转换却是很少见的,甚至很反感的。C++认为强制类型转换应该出现在底层的代码中,而不应该出现在软件开发中。C++认为在软件开发中不应该出现强制类型转换的,至少不应该
4、胡乱出现。C++提倡不要进行类型转换,直接设置正确的类型。在C++中进行强制类型转换可以使用以下四个函数实现。Static_cast用来进行数值类型之间的转换,或者有一方是void*指针类型之间的转换。该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。static_cast(expression)Const_cast用于临时去掉const或volatile限制,就是临时将常量转换成变量。就是在这个语句内时const限制被去掉了,跳出这个语句,const限制仍然存在。用法:const_cast(expressio
5、n)该运算符用来修改类型的const或volatile属性。除了const或volatile修饰之外,type_id和expression的类型是一样的。一、常量指针被转化成非常量的指针,并且仍然指向原来的对象;二、常量引用被转换成非常量的引用,并且仍然指向原来的对象;reinterpret_cast用于任意两种指针类型之间的转换或者是指针类型与数值类型之间的转换。(最危险的转换,一般不使用)einterpret_cast(expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针
6、(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。Dynamic_cast用于赋值类之间的转换dynamic_cast( expression )该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。dynamic_cast运算符可以在执行期决定真正的类型。如果downcast是安全的(也就说,如果基类指针或者引用确实指向一个派生类对
7、象)这个运算符会传回适当转型过的指针。如果downcast不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安
此文档下载收益归作者所有