我很想知道是否可以覆盖已实现的功能。
我的意思是,是否存在允许替代实施的功能声明/实施的法律语法?
我为什么要问? (我知道这听起来很荒谬)
首先,只是好奇心和扩展我的知识
其次,我了解到全局new
可以被覆盖(尽管强烈建议不要这样做)
第三,假设我写了一个库:AwsomeLibrary.hpp
,其中
我的朋友想要包括。
在很多功能中,有一个像void sort(int* arr)
这样的功能,他认为他可以更好地实现(当然也可以用相同的名称来实现)。
答案 0 :(得分:2)
我的意思是,是否存在函数声明的合法语法/ 允许替代实施的实现?
没有。这将打破单一定义规则(ODR)。
http://en.cppreference.com/w/cpp/memory/new/operator_new中记录的其次,我已经了解到全局
new
可以被覆盖(尽管如此) 强烈不推荐)。
可替换分配函数实际上只是一个非常特殊的情况,是语言和标准库之间的灰色区域;当然不是你可以推断自己代码的一般规则的东西。
第三,假设我写了一个库:AwsomeLibrary.hpp,其中 我的朋友想要加入。在很多功能中,有一个 函数就像void sort(int * arr),他认为他可以 更好地实现(当然,使用相同的名称)。
此类问题超出了C ++的范围。它们与Git等源控制版本控制系统更相关。例如,如果您的项目受Git控制,那么您的朋友可以通过更好的实现创建代码分支。
答案 1 :(得分:2)
除了您自己提到的一种“奇怪”语言功能外,语言级别无法实现:可替换的operator new
和operator delete
功能。这些函数可以通过专用机制替换,这就是为什么它被正式称为 replacement (而不是覆盖或重载)。语言用户无法使用此功能来执行自己的功能。
超出标准语言的限制,您可以使用弱符号等特定于实现的功能,这将允许您创建可替换的功能。例如,GNU标准C库中的几乎所有函数都被声明为弱符号,可以用用户提供的实现替换。
后者恰好可以替代库中的void sort(int* arr)
函数。然而,这对于库来说看起来不是一个好的设计。功能替换功能可能应保留用于调试/日志记录以及其他内部库调整目的。