C++第十一天 表达式

来源:互联网 发布:java 领域模型 编辑:程序博客网 时间:2024/06/06 10:07
 箭头操作符(->):指向对象的一个指针,通过解引用获取该对象,然后使用点操作符(object.opterator())调用对象的成员函数。例如:ClassName *sp=classObject;(*sp).operator();箭头操作符则一步获取该对象和使用该对象的成员函数,例如:sp->operator();sizeof操作符sizeof操作符的作用是返回一个对象或类型名的长度,返回值的类型是size_t,长度的单位是字节,sizeof表达式的结果是编译时常量。sizeof(type name)sizeof(expr)sizeof expr;例如:ClassName item,*p;sizeof(ClassName);sizeof item;sizeof *p;将sizeof用于expr时,并没有计算表达式expr的值,特别是在sizeof *p中,指针p可以持有一个无效地址,因为不需要对p做解引操作。sizdof使用注意事项:1.对char类型或值是char类型的表达式做sizeof操作保证得1.2.对引用类型做sizeof操作将返回存放此引用类型对象所需的内存空间大小。3.对指针做sizeof操作将返回存放指针所需的内存大小;注意,如果要获取该指针所指向对象的大小,则必须对指针进行解引操作。4.对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数,应为sizeof返回整个数组在内存中的存储长度,所以用sizeof数组的结果除以sizeof其元素类型的结果,即可求出数组元素的个数。例如://ia是一个数组    int sz=sizeof(ia)/sizeof(*ia);new和delete表达式:new是动态创建对象,也就是想自由存储空间(是堆吗?)申请内存,delete撤销动态创建的对象(也就是通过new创建的对象)。删除零值指针是安全的。注意:一旦删除了指针所指向的对象,立即将指针值为0,这样就非常清楚地表明指针不再指向任何对象了。强制转换:static_cast、dynamic_cast、const_cast、reinterpret_cast强制转换格式:cast_name<type>(expression);其中cast_name为强制转换符之一(static_cast、dynamic_cast、const_cast、reinterpret_cast),type为转换的目标类型,expression则是被强制转换的值。1.dynamic_cast:dynnamic_cast支持运行时识别指针或引用所指向的对象。2.const_cast:const_cast将转换掉表达式的const性质。例如:const char*pc_str;char *pc=string_copy(const_cast<char*>(pc_str));只有使用const_cast才能将const性质转换掉。在这种情况下,试图使用其他三种形式的强制转换都会导致编译时错误。除了添加或删除const特性,用const_cast符来执行其他任何类型转换,都会引起编译错误。3.static_cast编译器隐式执行的任何类型转换都可以有static_cast显示完成。double d=97.0;char ch=static_cast<char>(d);通过static_cast将存放在void*中的指针值强制转换为原来的指针类型,此时我们应确保保持指针值,也就是说强制转换的结果应该与原来的地址值相等。4.reinterpret_cast:reinterpret_cast通常为操作数的位模式提供较低层次的重新解释。reinterpret_cast本质上依赖于机器,要求程序员完全理解所涉及的数据类型,以及编译器实现强制转换的细节。注:避免使用强制类型转换。 #include<iostream>#include<string>using std::string;int main(){//std::cout<<24%4/2<<std::endl;int i=0;//错误,不能为字面数值赋值//if(42=i){}//先赋值,然后判断i的值是否是trueif(i=42){}//std::cout<<sizeof(byte)<<std::endl;std::cout<<sizeof(short)<<std::endl;std::cout<<sizeof(int)<<std::endl;std::cout<<sizeof(long)<<std::endl;std::cout<<sizeof(float)<<std::endl;std::cout<<sizeof(double)<<std::endl;std::cout<<sizeof(bool)<<std::endl;std::cout<<sizeof(char)<<std::endl; int x[10];int *p=x;//输出数组长度std::cout<<sizeof(x)/sizeof(*x)<<std::endl;//获取存放指针所需的内存大小和获取指针内对象的内存大小std::cout<<sizeof(p)/sizeof(*p)<<std::endl;string s="word";string pl=s+(s[s.size()-1]=='s'?"":"s");std::cout<<pl<<std::endl;return 0;}

0 0