表达式

C++定义了一元,二元运算符。作用于一个运算对象的运算符是一元运算符,如取地址符(&)和解引用符(*):作用于两个运算对象的运算符是二元运算符,如==(相等运算符)和乘法运算符(×)还有一个作用与三个运算对象的三元运算符。函数调用也是一种特殊的运算符,他对运算对象的数量没有限制。

在C++中一个左值表达式的求职结果就是一个对象或者一个函数,然而以常量为代表的对象的左值实际上不能作为赋值语句的左侧运算对象。此外,虽然表达式的求值结果是对象,但他们是右值而不是左值。归纳:当一个对象被用作右值的时候,用的是对象的内容,当对象被用作一个左值的时候,用的是对象的身份(在内存中的位置)。

赋值运算符需要一个(非常量的)左值作为其左侧的运算对象,得到的结果荏苒是一个左值。

取地址符作用与一个左值运算对象,返回一个指向该运算对象的指针,这个指针是一个右值。

内置解引用,下标运算符;

求值结果都是左值。

2、算术运算符;

一元正号,加法,减法运算符都可以用于一个指针或者算数值时,返回对象值是一个副本。

3、逻辑和关系运算符:

4、赋值运算符:满足右边结合律,靠右的赋值运算的结果都被赋值给了java,有赋值给了a

a=java=12;

5、递增递减运算符

6、成员访问运算符:

7、条件运算符:

(?:)允许把简单的if-else逻辑嵌入到表达式当中,条件运算符按照如下形式使用:

cond?a:b;

8、位运算符:

9、sizeof运算符:

返回的是一条表达式或一个类型名字所占的字节数。

10、逗号运算符:

二、类型转化:

在C++语言之中,某些类型之间有关联。如果两种类型有关联,那么当程序需要其中一种类型的运算对象时,可以用另外一种关联类型的对象或值来替代。换句话说,如果两种类型可以相互转换时,那么他们之间就是相互关联的。

(1)隐式转换:

如果表达式中既有整数类型的运算对象也有浮点数类型的运算对象,整形会转换成浮点型。

(2)算数转换:

把一种算数类型转换成另外一种算数类型。

(3)显示转化:

我们希望显示的将对象强制转换成另外一种类型。

(4)命名的强制类型转换:

一个命名的强制类型转化具有如下形式:

cast-name<type>(expression)

其中,type是转换的目标类型而expression是要转换的值。如果type是引用类型,则结果是左值。

cast-name是static_cast,dynamic_cast,const_cast

和reinterpret_cast中的一种。dynamic_支持运行时的类型识别。

1、static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。例如:通过讲一个运算对象强制转换成double类型就能使表达式执行浮点数除法。

double s=static_cast<double>(s);

2、const_cast:只能改变运算对象的底层const

3、reinterpret_cast:通常为运算对象的位模式提供较低层次上的重新解释。

原文地址:https://www.cnblogs.com/yjds/p/8597232.html