8
我在读this。约有趣的历史事实@NPE会谈给出&回答说,为什么从C++中删除重载关键字?
- 在早期的c + +曾经有过那要 来声明为重载标识一个特殊的关键字(超载);
那么,什么是落后去除超载关键字的原因是什么?我没有Stroustrup的Design and Evolution of C++
。超载关键字有什么问题?
我在读this。约有趣的历史事实@NPE会谈给出&回答说,为什么从C++中删除重载关键字?
那么,什么是落后去除超载关键字的原因是什么?我没有Stroustrup的Design and Evolution of C++
。超载关键字有什么问题?
Stroustrup的提及在d &ë11.2.4“的overload
关键字”该overload
关键字引起麻烦时“合并”(或使用)两个库其中两个使用相同的函数名(没有命名空间*)。例如,C头math.h
中的sqrt
与C++ complex
头中的sqrt(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
关键字是过时与CFRONT 2.0,于1989年命名空间释放被引入标准化的建议于1993年
关键字的初衷是处理两个担忧:
- 关注未检测到的歧义可能发生。
- 担心程序无法正确连接,除非程序员明确声明哪些函数应该是重载的 。
前者的恐惧很大程度上毫无根据。实际使用中发现的几个问题由独立于顺序的超载解决规则处理。后者的恐惧被证明在C分离编译规则的一般问题上没有任何基础,这与重载无关。
请购买/借阅/阅读D&E。这真是一本很棒的书,有很多启发性的见解。 – dyp
@PravasiMeet这是一个C库。我想增加一些像'#ifdef __cplusplus/* newline */overload sqrt;/* newline * /#endif'可能被认为是那些“难以管理的”解决方法之一,或者如果外部库头文件可能没有更改,则不可能解决此问题 – dyp
请解释一下,不被改变“? – Destructor