为什么从C ++中删除了重载关键字?

时间:2015-06-26 07:03:51

标签: c++ overloading

我正在阅读this。 @NPE给出的答案讲述了有趣的历史事实和说,

  • 在早期的C ++中,曾经存在一个特殊的关键字(重载) 用于将标识符声明为重载;

那么,删除重载关键字背后的原因是什么?我没有Stroustrup的Design and Evolution of C++。重载关键字有什么问题?

1 个答案:

答案 0 :(得分:9)

Stroustrup提及D& E 11.2.4" overload关键字" {&#34}合并" overload关键字会导致问题(或使用)两个库都使用相同的函数名(没有名称空间*)。例如,C标头sqrt中的math.h与C ++ sqrt(complex)标头中的complex相对。如果其中一个将该函数声明为 overloadable ,但另一个没有,则必须按照在发生重载之前启用重载的顺序包含标题:

// #include <complex>
overload sqrt;
complex sqrt(complex);

// #include <math.h>
double sqrt(double);   // fine

// ---------------------------

// #include <math.h>
double sqrt(double);

// #include <complex>
overload sqrt;         // ERROR: cannot allow overloading
                       //        of an already declared function
complex sqrt(complex);

除了最简单的情况之外,可能的解决方法是“无法管理的”#34;

(*)overload关键字在1989年发布的CFront 2.0中已经过时。命名空间在1993年被引入标准化提案。

该关键字的原意是为了解决两个问题:

  
      
  1. 关注未发现的歧义可能会发生。
  2.   
  3. 关注程序无法正确链接,除非程序员明确声明应该使用哪些函数   超载。
  4.         

    前者的恐惧基本上没有根据。在实际使用中发现的少数问题由与订单无关的重载解决规则处理。事实证明后者的恐惧没有基础与C单独编译规则的一般问题没有关系。