More Effective C++:35个改善编程与设计的有效方法(中文版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

操作符(Operators)操作符

Operators

“可加以重载的操作符(overloadable operators)”,啊哈,你一定爱死它了。它让你所定义的类型有着和 C++内建类型一样的语法,允许你在“操作符背后的支撑函数”内放置威力强大的手段,那是内建类型不可能有的待遇。当然,“可让诸如‘+’和‘==’符号做任何事情”这个事实,也意味你可能利用重载操作符写出一些令人难以理解的程序。成熟的 C++程序员知道如何驾驭操作符重载的强大威力,不落入令人费解的沉沦中。

可叹的是,稍有不慎,便向下沉沦。单自变量 constructors 及隐式类型转换操作符尤其麻烦,因为它们可以在没有任何外在迹象的情况下被调用。这可能会导致程序行为难以理解。另一类问题会在你将诸如&&和||等操作符重载之后发生,因为从“内建操作符”移转到“用户定制函数”所导致的各种语义敏感变化,很容易被忽略。最后,许多操作符和其他操作符之间有某种标准关系,但“操作符重载(operators overloading)”这个能力却使这种标准关系有被破坏的可能。

以下各个条款,我把焦点放在“重载操作符”被调用的时机、被调用的方法、它们的行为、它们应该如何与其他操作符产生关系,以及你如何夺取“重载操作符”的控制权。有了本章带给你的信息,你就可以像专家一样地将“重载操作符”玩弄于股掌之间了。