C++ 当STL类用作函数参数或返回类型时,为什么编译器不抛出警告c4251
与警告C4251“X”相关的问题需要具有dll接口,以便由“Y”类的客户端使用,此处对此进行了详细解释: 对于我来说,在从库导出的类中使用std::string作为成员不是一个好主意的原因很清楚,这是有道理的。然而,我真的不明白,如果我使用std::string作为参数类型或返回类型,为什么这不是一个问题C++ 当STL类用作函数参数或返回类型时,为什么编译器不抛出警告c4251,c++,dll,stl,C++,Dll,Stl,与警告C4251“X”相关的问题需要具有dll接口,以便由“Y”类的客户端使用,此处对此进行了详细解释: 对于我来说,在从库导出的类中使用std::string作为成员不是一个好主意的原因很清楚,这是有道理的。然而,我真的不明白,如果我使用std::string作为参数类型或返回类型,为什么这不是一个问题 class DllPort SampleClass { private: std::string privateMember; // Warning C4251 public:
class DllPort SampleClass
{
private:
std::string privateMember; // Warning C4251
public:
std::string publicMember; // Warning C4251
std::string publicFunction1(); // compiler says it is OK
void publicFunction2(std::string value);// compiler says it is OK
};
我使用Visual Studio 2015。我认为原因是
std::string
是std::basic_string
的一个显式专门化。因此,它不再是一个类模板。这同样适用于所有四种情况,@RSahu。也就是说,我认为,除了有用的信息外,上述SO帖子中的答案传播了相当多的FUD。查看例如Boost,了解如何正确操作。设置起来需要更多的时间,但是你不必为了动态链接而破坏你的界面。我认为原因是std::string
是std::basic_string
的一个显式专门化。因此,它不再是一个类模板。这同样适用于所有四种情况,@RSahu。也就是说,我认为,除了有用的信息外,上述SO帖子中的答案传播了相当多的FUD。查看例如Boost,了解如何正确操作。这需要更多的设置,但是你不必为了动态链接而破坏你的界面。