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
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号