操作符
计算机术语
操作符,(Operator)计算机术语。每个操作符都有自己的语义,具体取决于它所操作的类型。
基本特性
语义
每个操作符都有自己的语义,具体取决于它所操作的类型。
优先级
每个操作符都有优先级。
结合性
每个操作符都有结合性。操作符的结合性定义了操作符对操作数执行操作的顺序,例如:右结合性表示该操作符对其操作数从右向左执行操作。
操作符分类
指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令。组成操作符字段的位数一般取决于计算机指令系统的规模。
1.java操作符
2.c语言操作符
3.c++操作符
4.c#操作符
5.perl操作符
6.python操作符
7.javascript操作符
8.位操作符
10.作用域操作符
11.一元操作符
12.二元操作符
13.三元操作符
重载操作符
以下以操作符+为例说明:
用户定义的类型,如:字符串,日期,复数,联合体以及文件常常重载,二元操作符以实现对象的连接,附加或合并机制。但是要正确实现操作符会给设计,实现和性能带来一定的挑战 。
内建的 操作符有两个类型相同的操作数,相加并返回右值 6,然后被赋值给 x。我们可以断定内建的是一个二元的,对称的,可交换的操作符。它产生的结果的类型与其操作数类型相同。按照这个规测,当你为某个用户定义类型重载操作符时,也应该遵循相应内建操作符的特征。
下面我们就来分析内建操作符的特征并尝试模仿其相应的重载机制。
第一步:在成员函数和非成员函数之间选择
你可以用类成员函数的方式实现二元操作符如:+、- 以及 ==,例如:class String {public: bool operator==(const String & s); // 比较 *this 和 s};
这个方法是有问题的。相对于其内建的操作符来说,重载的操作符在这里不具有对称性;它的两个参数一个类型为:const String * const(这个参数是隐含的),另一个类型为:const String &。因此,一些 STL 算法和容器将无法正确处理这样的对象。
另外一个可选方法是把重载操作符 + 定义为一个外部(extern)函数,该函数带两个类型相同的参数:
String operator + (const String & s1, const String s2);
这样一来,类 String 必须将该重载操作符声明为友元
class String{public: friend String operator+(const String& s1,const String&s2);};
第二步:返回值的两难选择
如前所述,内建操作符 + 返回右值,其类型与操作数相同。但是在调用者堆栈里返回一个对象效率很低,处理大型对象时尤其如此。那么能不能返回一个指针或引用呢?答案是不行。因为返回指针破坏参数类型与返回值类型应该相同的规则。更糟的是,链接多个表达式将成为不可能:
String s1,s2,s3; String res;res=s1+s2+s3; // 不可能用 String* 作为返回值
虽然有一个办法可以定义额外的 + 操作符重载版本,但这个办法是我们不希望用的,因为返回的指针必须指向动态分配的对象。这样的话,如果调用者释放(delete)返回的指针失败,那么将导致内存泄漏。显然,返回 String* 不是一个好主意。
那么返回 String& 好不好呢?返回的引用必须一定要是一个有效的 String。它避免了使用动态对象分配,该方法返回的是一个本地静态对象的引用。静态对象确实解决了内存泄漏问题,但这个方法的可行性仍然值得怀疑。在一个多线程应用中,两个线程可能会并发调用 + 操作符,因此造成 String 对象的混乱。而且,因为静态对象总是保留其调用前的状态,所以有必要针对每次 + 操作符的调用都清除该静态 String 对象。由此看来,在堆栈上返回结果仍然是最安全和最简单的解决方案。
SQL操作符
比较操作符
相等:相等操作符在SQL语句里比较一个值与另一个值,等号(=)表示相等。在进行相等比较时,被比较的值必须完全匹配,否则就不会返回数据。如果在相等比较过程中两个值相等,那么这个比较的返回值就是true,否则就是false。这个布尔值(true或false)用于决定是否返回数据。
不相等:在SQL里表示不相等的操作符是<>(一个小于号和一个大于号)。如果两个值不相等,条件就返回true,否则就返回false。另一种表示不相等的方式是!=,而且很多主要的SQL实现采用这种方式。
小于:<
大于:
比较操作符的组合:等号可以与小于号和大于号联合使用。
逻辑操作符
用户对SQL关键字而不是符号进行比较。
is null:这个操作符用于与null值进行比较。
between:操作符between用于寻找位于一个给定最大值和最小值之间的值,这个最大值和最小值是包含在内的。between是包含边界值的,所以查询结果里会包含指定的最大值和最小值。
in:操作符in用于把一个值与一个指定列表进行比较,当被比较的值至少与列表中一个值相匹配时,它会返回true。使用操作符in可以得到操作符or一样的结果,但它的速度更快。
like:操作符like利用通配符把一个值与类似的值进行比较,通配符有两个:百分号(%);下划线(_)。百分号代表零个、一个或多个字符;下划线( _ )代表一个数字或字符。
exists:这个操作符用于搜索指定表里是否存在满足特定条件的记录。
all:操作符all用于把一个值与另一个集合里全部值进行比较。
any/some:操作符any用于把一个值与另一个列表里任意值进行比较。some是any的别名,它们可以互换使用。
连接操作符
如果想在SQL语句里利用多个条件来缩小数据范围,我们就需要组合多个条件。这正是连接操作符的功能。
and:操作符and让我们可以在一条SQL语句的where子句里使用多个条件。在使用and时,无论SQL语句是事务操作还是查询,所有由and连接的条件都必须为true,SQL语句才会实际执行。
or:操作符or可以在SQL语句的where子句中连接多个条件,这时无论SQL语句是事务操作还是查询,只要or连接的条件里有至少一个是true,SQl语句就会执行。
注意:比较操作符和逻辑操作符都可以单独或彼此复合使用。
提示:当SQL语句里包含多个条件和操作符时,利用圆括号把语句按照逻辑关系进行划分可以提高语句的可读性。当然,不恰当地使用圆括号也会影响输出结果。
求反操作符
操作符not可以颠倒逻辑操作符的含义,它可以与其他操作符构成以下几种形式:
not equal:不相等
not between:操作符between的求反
not in:操作符in的求反
not like:操作符like的求反
is not null:操作符is null的求反
not exists:操作符exists的求反
not unique:操作符distinct的求反
算术操作符
加法(+)
减法(-)
乘法(*)
除法(/)
算术操作符可以彼此组合使用,并且遵循基本算数运算中的优先级:首先执行乘法和除法,然后是加法和减法。用户控制算术运算次序的唯一方式是使用圆括号,圆括号里包含的表达式会被当作一个整体进行优先求值。
参考资料
最新修订时间:2024-10-10 21:23
目录
概述
基本特性
操作符分类
参考资料