繁体   English   中英

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

[英]why overload keyword removed from C++?

我正在读这个 @NPE给出的答案讲述了有趣的历史事实并说,

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

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

Stroustrup在D&E 11.2.4“ overload关键字”中提到,当“合并”(或使用)两个使用相同函数名称(没有名称空间*)的库时, overload关键字会引起麻烦。 例如, sqrt在C头math.h相对于sqrt(complex)从C ++ complex报头。 如果其中一个声明该函数是可重载的 ,但另一个没有声明,则必须按照在发生重载之前启用重载的顺序包含标头:

// #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);

可能的解决方法是“在除最简单的情况之外的所有情况下都无法管理”。

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

关键字的初衷是解决两个问题:

  1. 担心可能会出现未检测到的含糊之处。
  2. 关注程序无法正确链接,除非程序员明确声明哪些函数应该被重载。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM