// 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;
}
Tôi có ba tệp: SomeOtherClass.hpp/cpp, main.cpp. Các tệp đó dẫn đến hai tệp nhị phân: thư viện được chia sẻ (của SomeOtherClass.cpp) và tệp thực thi (của main.cpp, được liên kết với thư viện được chia sẻ).Biến tĩnh C++ trong các phương thức lớp tĩnh được xác định trong tiêu đề
Không C++ bảo đảm rằng static <any-type> _instance
sẽ là một biến duy nhất trong quá trình thực hiện chương trình (không quan trọng trong số lượng nhị phân được xác định)?
Lưu ý Để làm rõ tình huống. Sự nhầm lẫn mà tôi thấy trong tình huống này là, một mặt, SomeOtherClass::callMe
được định nghĩa trong chương trình hai lần, được mong đợi (vì hàm thành viên tĩnh lớp thực sự là một hàm bình thường với liên kết bên trong, nếu chúng được định nghĩa tại chỗ, như trong này trường hợp), và đó là những gì bạn có thể thấy từ việc tháo gỡ. Vì chúng ta có hai hàm với các biến địa phương tĩnh trong mã máy. Ngôn ngữ/tiêu chuẩn đủ điều kiện hành vi của họ như thế nào?
Khi sử dụng MS Visual Studio, bạn sẽ cần sử dụng đúng '__declspec' khi tạo DLL và sử dụng DLL để nó hoạt động. –
Vâng, tôi biết ơn vì điều đó. – user14416
Nếu câu hỏi thực sự là về các biến tĩnh trên các ranh giới DLL thì cần được đề cập trong tiêu đề và nổi bật hơn trong văn bản –