首页 > 编程语言 > 详细

语言的设计之名字(二)

时间:2021-04-23 00:45:26      阅读:21      评论:0      收藏:0      [点我收藏+]

  1.作用域中别名的含义

  在程序中同一位置上两个或多个名字引用同一对象的情况称为别名;一个名字在程序中一个给定位置上引用多个对象的情况称为重载。

  1.1内部运算符的重载

  在面向对象的C++中,A+B可以是operator+(A,B)的简写,也可以是A.operator+(B)的简写。在后一种情况下,A是一个类的实例,该类定义了operator+函数。

  1.2多态性及相关概念

  对于子程序的名字,很值得区分重载与另外两个与之密切相关的概念:强制多态性。这三个概念都用于在某些环境中将不同类型的参数传给一个特定名字的子程序(或从他们返回多种类型的值)。在它们相似的语法形式背后,隐藏着截然不同的语义和实现问题。

  强制是一个过程,通过这个过程编译器为满足外围环境的要求,自动将某类型的值转换为另一种类型的值。c++一般是内置类型间才有强制转换,它允许程序员用自己定义的强制来扩展内置的强制集。强制机制会带来隐含成本(转换类型的开销)。

  多态性是一种机制:它使同一个子程序可以不加转换地接收多种类型的参数。要使这个概念有意义,这些类型必须具有某些特定的共同特性,而相应的代码必须不依赖于共同特性之外的其他任何特性。在参数化多态性中,代码显式或隐式以一个类型作为参数;在子类型的多态性中,代码被设计为用作某个特定类型T,但程序员可以将另外的类型定义为T的扩充或精化,而相应的多态性代码也能用于这些子类型。显式的参数多态性也被称为泛型。泛型机制在C++中称为模板。泛型通常使用为多态性代码创建多个副本的方式实现,即为所需的每一个实在类型创建一个副本。继承(子类型多态性)几乎总是通过创建代码的唯一副本的方式实现,并需要在对象的表示中插入足够多的“元数据”(这个是虚函数表吗),使代码知道何时需要按不同的方式处理它们。

  对于重载,程序员必须为需要func的每个类型手工实现一份代码。而泛型(在典型实现中)使编译器为每个需要func的类型自动的生成一个副本。

  2 引用环境的约束

  与采用静态作用域规则且不允许嵌套子程序的语言无关(C语言),感兴趣的同学可以查阅相关资料。

  3 宏扩展

  宏不需要支持语言本身所具有的命名常量。更重要的是参数化的宏比等价的C函数要高效得多。他们避免了子程序调用的开销。宏的局限性源自宏是通过文本替代来实现的,并且不能被编译器的其余部分所理解。(技巧:参数化的宏写好括号很重要)

  4 分别编译

  5 目标机体系结构

语言的设计之名字(二)

原文:https://www.cnblogs.com/liushanyuan/p/14690631.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!