运算符概览

  本节将给出对表达式的综述和一些实例。每个运算符都伴随着一个或几个经常对它使用的名字和一个使用的例子。在表格中,class_name表示一个类的名字,member表示一个成员的名字,object表示一个能产生出类对象的表达式,pointer是一个产生指针的表达式,expr是表达式,而lvalue是一个表示非常量对象的表达式。其中的type如果出现在括号里,它就可以是一个一般性的类型名(可以带*,()等),否则对type的使用就存在着某些限制(A.5节)。

  表达式的语法与运算对象的类型无关。这里所给出的意义只适用于内部类型的运算对象(4.1.1节)。除此之外,你可以定义运算符的意义,使之能应用于用户定义类型的运算对象(2.5.2节、第11章)。

每个间隔里的运算符具有相同优先级。位于上面的间隔里的运算符比下面间隔里的运算符优先级更高。例如,a+bc的意思是a+(b\c),而不是(a+b)*c,因为*比+的优先级更高。类似地,*p++的意思是*(p++)而不是(*p)++。

  一元运算符和赋值运算符是右结合的,其他运算符都是左结合的。例如,a=b=c的意思是a=(b=c),a+b+c是(a+b)+c。

  也有不多的几条语法规则无法通过优先级(也被看做是约束强度)和结合性来说明。例如,a=b<c?d=e:f=g的意思是a=((b<c)?(d=e):(f=g))。你需要去查看语法(A.5节)以确定这些东西。

🔚