我必须维护我正在处理的这个C ++库的二进制兼容性。
目前,我有这些方面的内容
class Foo
{
void Bar()
{
static bool flag = true;
}
}
删除flag
是否会破坏Foo
的二进制兼容性?
除了如果重要的话,我的编译器目前是VC7.1。
答案 0 :(得分:2)
static
变量不是函数接口的一部分,因此不会影响二进制兼容性。你应该知道,如果函数非常简单,那么在这种情况下它可能已被内联,除非你重新编译所有用户,否则你将破坏ODR。
简单建议:尽可能重新编译。如果不可能,请确保原始代码中没有内联。
答案 1 :(得分:1)
它不会破坏二进制兼容性,因为某些东西肯定会崩溃,或者程序无法启动。
然而,如果该方法被内联,它可能会破坏功能。内联版本仍将访问该静态变量,然后针对新头文件构建的代码将生成不使用静态变量的方法。这取决于代码,如果这是一个问题,但通常是,静态变量(不会被重新编译的代码使用)可能不仅仅是为了好玩,也不是替换(不会被使用)旧内联代码)。
课程:如果您想避免在修改库头之后重新编译所有内容,请不要从头文件中的任何代码访问静态变量,或者执行您可能想要更改的任何其他内容。假设头文件中的所有代码都可以内联。
答案 2 :(得分:0)
没有。它没有外部可见性。