这似乎是一个相当随意的限制.常规方法不像C函数那样带有指向实例的参数吗?
如果是这样,我不明白为什么添加新方法会迫使我重新编译我的其余课程.为什么不允许通过单独的修订标题和单独的修订实现添加方法.
考虑这个例子
// in some header
struct X
{
float func(float);
};
// and in another source file
void caller()
{
X x;
std::cout << x.func(2); // will call X:func(float)
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说我们决定添加一个func()接受的新版本int.
// in some header
struct X
{
float func(float);
void func(int);
};
// and in another source file
void caller()
{
X x;
std::cout << x.func(2);
}
Run Code Online (Sandbox Code Playgroud)
如果caller()没有重新编译该函数,则无法注册它正在调用的函数已更改 - 它将继续调用X::func(float)构建.
然后 - 可能是几个月(或大型系统,几年)事后 - 另一个开发人员对同一源文件中的一个函数进行了完全无关的更改caller().因此,源文件最终得到重建.突然间,该人发现caller()无法编译 - 错误消息与他或她正在实施的代码更改没有任何关系.
当犯罪者 - 引入新成员函数但未触发重新编译和重建的程序员 - 无处可见时,所有这一切都会发生.
留下的开发人员留下来解决这个烂摊子.由于没有关于实际导致问题的原因的信息,为什么它在昨天工作但今天没有,没有真正的线索如何正确地解决它......但仍然是负责任的人.
这只是C++中"任意限制"会阻止的许多问题之一.
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |