添加/删除函数静态变量会破坏二进制兼容性吗?

时间:2013-03-19 12:24:00

标签: c++

我必须维护我正在处理的这个C ++库的二进制兼容性。

目前,我有这些方面的内容

class Foo
{
    void Bar()
    {
        static bool flag = true;
    }
}

删除flag是否会破坏Foo的二进制兼容性?

除了如果重要的话,我的编译器目前是VC7.1。

3 个答案:

答案 0 :(得分:2)

static变量不是函数接口的一部分,因此不会影响二进制兼容性。你应该知道,如果函数非常简单,那么在这种情况下它可能已被内联,除非你重新编译所有用户,否则你将破坏ODR。

简单建议:尽可能重新编译。如果不可能,请确保原始代码中没有内联。

答案 1 :(得分:1)

它不会破坏二进制兼容性,因为某些东西肯定会崩溃,或者程序无法启动。

然而,如果该方法被内联,它可能会破坏功能。内联版本仍将访问该静态变量,然后针对新头文件构建的代码将生成不使用静态变量的方法。这取决于代码,如果这是一个问题,但通常是,静态变量(不会被重新编译的代码使用)可能不仅仅是为了好玩,也不是替换(不会被使用)旧内联代码)。

课程:如果您想避免在修改库头之后重新编译所有内容,请不要从头文件中的任何代码访问静态变量,或者执行您可能想要更改的任何其他内容。假设头文件中的所有代码都可以内联。

相关问题:static variables in an inlined function

答案 2 :(得分:0)

没有。它没有外部可见性。