3 c++
是否可以防止C++中用户定义函数的重载?假设我有一个函数:
void foo(int , int);
Run Code Online (Sandbox Code Playgroud)
我可以防止foo过载,如果是这样的话怎么样?如果可以,可以扩展以防止通过继承覆盖方法吗?
CB *_*ley 10
总之一句:不.您无法防止在foo其他位置使用其他签名定义过载,也无法阻止虚拟功能被覆盖.
在C++世界中,您必须对编写程序中编写的代码的人给予某种程度的信任.
标准的第13.1.1至13.1.3节描述了不能重载的函数种类:
某些函数声明不能重载:
- 仅在返回类型上不同的函数声明不能重载.
- 如果它们中的任何一个是静态成员函数声明(9.4),则不能重载具有相同名称和相同参数类型的成员函数声明.
注意:如8.3.5中所述,具有等效参数声明的函数声明声明了相同的函数,因此不能重载:
- 仅在使用等效typedef"types"时不同的参数声明是等效的.typedef不是单独的类型,而只是另一种类型的同义词(7.1.3).
- 仅在指针*与数组[]之间不同的参数声明是等效的.也就是说,数组声明被调整为一个指针声明(8.3.5).只有第二个和后续的数组维度在参数类型中很重要(8.3.4).
- 仅在那一个中不同的参数声明是函数类型而另一个是指向相同函数类型的指针是等效的.也就是说,调整函数类型以成为函数类型的指针(8.3.5).
- 仅存在或不存在const和/或volatile的参数声明是等效的.也就是说,在确定声明,定义或调用哪个函数时,将忽略每个参数类型的const和volatile类型说明符.
- 仅在默认参数上有所不同的两个参数声明是等效的.
否则,函数可能会重载,并且无法阻止它.