C++ - 分发不同于开发的标头

Ben*_*Ben 3 c++ header

我很好奇在C++中这样做:

可以说我有一个小型库,我分发给我的用户.我给我的客户端他们需要的二进制文件和相关的头文件.例如,假设在开发中使用以下标头:

#include <string>

ClassA 
{
    public:
        bool setString(const std::string & str);

    private:
        std::string str;
};
Run Code Online (Sandbox Code Playgroud)

现在我的问题.对于部署,我向客户提供"减少"标题是否存在根本性的错误?例如,我可以剥离私有部分并简单地给它们:

#include <string>

ClassA 
{
    public:
        bool setString(const std::string & str);
};
Run Code Online (Sandbox Code Playgroud)

我的直觉是"是的,这是可能的,但有些问题",所以这就是我在这里提出这个问题的原因.如果这是可能的并且也是安全的,那么它看起来是隐藏私有变量的好方法,因此在某些情况下甚至可以避免前向声明.

我知道这些符号仍然存在于二进制文件中,并且这只是源代码级别的可见性问题.

谢谢!

sth*_*sth 6

以这种方式修改类声明将导致代码不兼容.

编译器需要类声明来确定该类的实例占用多少空间以及该空间中成员变量所在的位置.

如果在一个标题中省略成员(甚至是私有成员),使用此标头编译的代码将采用该类的不同布局.它将为类的实例分配更少的空间,并假设成员变量位于不正确的位置.