C++表达式

代码要明意
养成良好的编程习惯

条件运算符(? :)可镶套使用
eg:final_grade = (grade > 90) ? “A” : (grade > 60) ? “B” : “C”;

条件表达式的优先级非常低,一般在一条长表达式中嵌套使用条件表运算子表达式时,通常需要在它两端加上括号。

位运算

关于符号位处理:
没有明确的规定,依赖于机器,建议用位运算处理无符号型。

sizeof
两种形式:
sizeof(type)
sizeof expr

逗号运算符

逗号运算符含有两个运算对象,按照从左向右的顺序依次求值。
对于逗号运算符来说,首先对左侧的表达式求值,然后将求值结果丢弃掉。逗号运算符真正的结果是右侧表达式的值。如果右侧表达式的值是左值,那么最终的求值结果也是左值。
逗号运算符长用在for循环中:

vector<int>:: size_type cnt = ivec.size();
//将从size到1的值赋值给ivec的元素
for(vector<int>:: size_type ix = 0;ix != ivec.size();++ix,--cnt)
	ivec[ix] =  cnt;

类型转换

隐式类型转换:

  • 在大多数表达式中,比int类型小的整型值首先提升为较大的整数类型(整型提升)
  • 在条件中,非布尔型转换为布尔型
  • 初始化的过程中,初始值转换成变量的类型;在赋值语句中,右侧运算的对象转换成左侧运算对象的类型
  • 如果算术运算或者关系运算的运算对象有多种类型,需要转换成同一种类型
  • 函数调用时发生类型转换

算术转换:
运算符的运算对象将转换为最宽的类型。
当表达式中既有整型又有浮点型时,整数值将转换为相应的浮点型。

数组转换成指针:在大多数用到的数组的表达式中数组自动转换成指向数组首元素的指针

指针的转换:
指向任意类型的非常量指针均可转换成void指针
指向任意对象的指针均可转换成const void

类类型定义的转换:
类类型能定义由编译器自动执行的转换,不过编译器每次只能执行一种类类型的转换。
eg:
striing s, t = “a example”;//字符串字面值转换成string类型
while(cin >> s)//cin转换为布尔型

强制类型转换
(尽量避免使用强制类型转换)
cast-name(expression);
cast-name : static_cast, dynamic_cast, const_cast, reinterpret_cast

static_cast
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。

double slope = static_cast(i) / j ;

当需要把一个较大的算术类型赋值给较小的算术类型时,static_cast非常有用。

const_cast
改变运算对象的底层const
const_cast常用与有函数重载的上下文中。

使用boost::sprirt编写的表达式解析器,代码很容易扩展,功能很强大,适合做功能强大的客户化定义程序。 -----------表达式解析--------- 已定义的函数有:PI,SIN,COS,TAN,,ABS,EXP,LOGN,POW,SQRT,FORMAT,LENGTH,SUBSTR 强制类型转换请使用:(数据类型)数据 例如:(int) "100" 的值为int型100 已定义的变量有:var1=123,var2=this is a string 请输入您的表达式>>1+2 计算结果:3 XML格式显示计算过程: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE parsetree SYSTEM "parsetree.dtd"> <!-- 1+2 --> <parsetree version="1.0"> <parsenode rule="add_expr"> <value>+</value> <parsenode rule="integer_const"> <value>1</value> </parsenode> <parsenode rule="integer_const"> <value>2</value> </parsenode> </parsenode> </parsetree> 计算结果数据类型:integer 计算结果:3 请输入您的表达式>>"ab"+"cd" 计算结果:"abcd" XML格式显示计算过程: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE parsetree SYSTEM "parsetree.dtd"> <!-- "ab"+"cd" --> <parsetree version="1.0"> <parsenode rule="add_expr"> <value>+</value> <parsenode rule="string_const"> <value>"ab"</value> </parsenode> <parsenode rule="string_const"> <value>"cd"</value> </parsenode> </parsenode> </parsetree> 计算结果数据类型:string 计算结果:abcd 请输入您的表达式>>format("1+2=%d",1+2) 计算结果:format("1+2=%d",3) XML格式显示计算过程: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE parsetree SYSTEM "parsetree.dtd"> <!-- format("1+2=%d",1+2) --> <parsetree version="1.0"> <parsenode rule="function_identifier"> <value>format</value> <parsenode rule="exprlist"> <parsenode rule="string_const"> <value>"1+2=%d"</value> </parsenode> <parsenode rule="add_expr"> <value>+</value> <parsenode rule="integer_const"> <value>1</value> </parsenode> <parsenode rule="integer_const"> <value>2</value> </parsenode> </parsenode> </parsenode> </parsenode> </parsetree> 计算结果数据类型:string 计算结果:1+2=3 请输入您的表达式>>PI() 计算结果:PI() XML格式显示计算过程: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE parsetree SYSTEM "parsetree.dtd"> <!-- PI() --> <parsetree version="1.0"> <parsenode rule="function_identifier"> <value>PI</value> </parsenode> </parsetree> 计算结果数据类型:double 计算结果:3.1415926535897931 请输入您的表达式>>cos(1.5) 计算结果:cos(1.5) XML格式显示计算过程: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE parsetree SYSTEM "parsetree.dtd"> <!-- cos(1.5) --> <parsetree version="1.0"> <parsenode rule="function_identifier"> <value>cos</value> <parsenode rule="double_const"> <value>1.5</value> </parsenode> </parsenode> </parsetree> 计算结果数据类型:double 计算结果:0.070737201667702906 请输入您的表达式>>q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值