// SomeOtherClass.hpp
#pragma once
int someOtherCallMe();
class SomeOtherClass {
public:
static int callMe() {
static int _instance = 7;
++_instance;
return _instance;
}
};
// SomeOtherClass.cpp
#include "SomeOtherClass.hpp"
int
someOtherCallMe() {
return SomeOtherClass::callMe();
}
// main.cpp
#include "SomeOtherClass.hpp"
#include <iostream>
int
main() {
std::cout << SomeOtherClass::callMe();
std::cout << someOtherCallMe();
return 0;
}
我有三个文件:SomeOtherClass.hpp / cpp, main.cpp。 这些文件将导致两个二进制文件:共享库(SomeOtherClass.cpp的)和可执行文件(main.cpp的,链接到共享库)。
C ++是否保证static <any-type> _instance在程序执行期间将是单个变量(无论它在多少个二进制文件中定义)?
注意 为了澄清情况。 我在这种情况下看到的混淆是,一方面,SomeOtherClass :: callMe在程序中被定义了两次,这是预期的(因为类静态成员函数实际上是带有内部链接的常规函数,如果它们在原地定义,就像在这种情况下一样),这就是您可以从反汇编中看到的内容。由于我们在机器代码中有两个具有静态局部变量的函数。 语言/标准如何评估它们的行为?
__declspec
才能使其正常工作。 - R Sahu