C++ 标准库中的类型的编译器警告(级别 2)C4251

如果类派生自 C++ 标准库中的类型,而你正在编译调试版本 (/MTd),并且编译器错误消息引用 _Container_base,则可以忽略 C4251

应慎重将 __declspec(dllexport)__declspec(dllimport) 添加到类中,因为这大概率会成为一种不正确的选择,它会增加更改实现细节的难度,进而使维护变得更加困难

示例:

// C4251.cpp
// Compile with /std:c++20 /EHsc /W2 /c C4251.cpp
#include <vector>
 
class __declspec(dllexport) X
{
public:
    X();
    ~X();
 
    void do_something();
 
private:
    void do_something_else();
    std::vector<int> data; // warning c4251
};

若要修复此警告,请勿使用 __declspec(dllexport)__declspec(dllimport) 标记类。 只需标记客户端直接使用的方法。 例如:

// C4251_fixed.cpp
// Compile with /std:c++20 /EHsc /W2 /c C4251-fixed.cpp
#include <vector>
 
class X
{
public:
    __declspec(dllexport) X();
    __declspec(dllexport) ~X();
 
    __declspec(dllexport) void do_something();
 
private:
    void do_something_else();
    std::vector<int> data;
};




来自:https://learn.microsoft.com/zh-cn/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4251?view=msvc-170
posted @ 2024-09-14 15:02  double64  阅读(134)  评论(0)    收藏  举报