不常见的数据类型
时间:2010-06-08 来源:checl1987_EE
explicit:
explicit主要用于 "修饰 "构造函数.
使得它不用于程序中需要通过此构造函数进行 "隐式 "转换的情况!
指定此关键字,需要隐式转换方可进行的程序将会不能通过. 而可通过强制转换使它没有用.
static_cast: 支持子类指针到父类指针的转换,并根据实际情况调整指针的值,反过来也支持,但会给出编译警告,它作用最类似C风格的“强制转换”,一般来说可认为它是安全的;
dynamic_cast: 支持子类指针到父类指针的转换,并根据实际情况调整指针的值,和static_cast不同,反过来它就不支持了,会导致编译错误,这种转换是最安全的转换;
reinterpret_cast: 支持任何转换,但仅仅是如它的名字所描述的那样“重解释”而已,不会对指针的值进行任何调整,用它完全可以做到“指鹿为马”,但很明显,它是最不安全的转换,使用它的时候,你得头脑清醒,知道自己在干什么;
const_cast:这个转换能剥离一个对象的const属性,也就是说允许你对常量进行修改。(C++优化可能对常量修改无效) http://www.360doc.com/content/08/1015/15/66214_1767978.shtml
mutable: 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
register: 用register声明的变量称着寄存器变量,在可能的情况下会直接存放在机器的寄存器中;但对32位编译器不起作用,当global optimizations(全局优化)开的时候,它会做出选择是否放在自己的寄存器中;不过其它与register关键字有关的其它符号都对32位编译器有效。
template: 类模板
typename: 我认为typename的语义是: 通知编译器, 在typename后面被声明的东西是一个类型, 而不是别的 什么东西.
typeid: 关键字typeid(类型标识符):用来检测指针类型(返回type_info类对象的指针),格式为:typeid ( exdivssion ) 或 typeid ( type-id )其中,exdivssion为结果为对象的表达式,type-id为类名。
指定此关键字,需要隐式转换方可进行的程序将会不能通过. 而可通过强制转换使它没有用.
static_cast: 支持子类指针到父类指针的转换,并根据实际情况调整指针的值,反过来也支持,但会给出编译警告,它作用最类似C风格的“强制转换”,一般来说可认为它是安全的;
dynamic_cast: 支持子类指针到父类指针的转换,并根据实际情况调整指针的值,和static_cast不同,反过来它就不支持了,会导致编译错误,这种转换是最安全的转换;
reinterpret_cast: 支持任何转换,但仅仅是如它的名字所描述的那样“重解释”而已,不会对指针的值进行任何调整,用它完全可以做到“指鹿为马”,但很明显,它是最不安全的转换,使用它的时候,你得头脑清醒,知道自己在干什么;
const_cast:这个转换能剥离一个对象的const属性,也就是说允许你对常量进行修改。(C++优化可能对常量修改无效) http://www.360doc.com/content/08/1015/15/66214_1767978.shtml
mutable: 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
register: 用register声明的变量称着寄存器变量,在可能的情况下会直接存放在机器的寄存器中;但对32位编译器不起作用,当global optimizations(全局优化)开的时候,它会做出选择是否放在自己的寄存器中;不过其它与register关键字有关的其它符号都对32位编译器有效。
template: 类模板
typename: 我认为typename的语义是: 通知编译器, 在typename后面被声明的东西是一个类型, 而不是别的 什么东西.
typeid: 关键字typeid(类型标识符):用来检测指针类型(返回type_info类对象的指针),格式为:typeid ( exdivssion ) 或 typeid ( type-id )其中,exdivssion为结果为对象的表达式,type-id为类名。
相关阅读 更多 +