C++第十一天 表达式

 
	箭头操作符(->):
		指向对象的一个指针,通过解引用获取该对象,然后使用点操作符(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的值是否是true
	if(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值