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 @   double64  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示