gpt4 book ai didi

c++ - 导出类 (DLL) 中静态数据成员的可访问性?

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:31 25 4
gpt4 key购买 nike

假设我有这个类:

class __declspec(dllexport) MyClass
{
public:
static int Bar;
static MyOtherClass Foo;
private:
static int OtherStuff;
};

我有一些问题(我正在使用 MSVC 编译器):

  1. 导入此类的客户端是否可以访问静态成员“Bar”?
  2. 是否也会导出静态成员“OtherStuff”?如果不是,这是由于访问修饰符 private: 造成的吗?
  3. 如果类 MyOtherClass 没有用 __declspec(dllexport) 定义,我相信这意味着警告 C4251 将由 MSVC 编译器发出,但这是否意味着导入此类的客户端将无法访问变量 Foo

我基本上只是在脑海中运行各种场景,试图仅根据静态数据成员找出 DLL 类接口(interface)中导出的内容和未导出的内容(因此无法访问)。

最佳答案

对于代码:

class MyOtherClass
{
public:
int something;
};

class __declspec(dllexport) MyClass
{
public:
static int Bar;
static MyOtherClass Foo;
private:
static int OtherStuff;
};

int MyClass::Bar = 0;
MyOtherClass MyClass::Foo;
int MyClass::OtherStuff = 0;

我在 Dependency Walker 中得到以下信息:

class MyClass & MyClass::operator=(class MyClass const &)
int MyClass::Bar
class MyOtherClass MyClass::Foo
int MyClass::OtherStuff

显然变量 MyClass::Foo 确实被导出,但是类 MyOtherClass 不是。如果您尝试从该静态变量访问 MyOtherClass::something,我不确定在这种情况下会发生什么。

关于c++ - 导出类 (DLL) 中静态数据成员的可访问性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9319981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com