C++如何获取父数据类型的sizeof?

标签 c++ vector struct sizeof volatile

  1. 我有包含结构 B 的结构 A。
  2. 我想在里面有一个整数 结构 B 来保存结构 A () 的大小。
  3. 但是,结构 B 有一个 未知大小的 vector ,可能随时不同。
  4. 易变的 vector 会不断改变结构 A 的大小。

如果不创建指针,我将如何着手执行此操作?

struct A {
    struct B {
        std::vector<int> some_Vector;       // unknown size
        size_t A_size = ????;               // must always return the total size of A
    };

    B struct_B;
};

最佳答案

  1. vector 本身的大小(由 sizeof 给出)是恒定的,不会受它包含多少元素的影响。区分其“逻辑大小”和“物理大小”。毕竟,sizeof(std::vector<int>)必须评估某些东西,并且 vector 中没有任何对象,根本没有 vector 。 vector 的内容只影响成员返回的值 std::vector::size .

  2. 因此每个结构的大小将保持不变。您只需要在两个结构都完全定义后获取它。您可以使用构造函数来完成它。而不是默认的初始值设定项。

    struct A {
        struct B {
            std::vector<int> some_Vector;      
            size_t A_size;
            B();               
        };
    
        B struct_B;
    };
    
    A::B::B() : A_size{sizeof(A)}, some_Vector{} {
    }
    

虽然,坦率地说,我看不出任何人想要捕获 sizeof 的原因一个结构并在运行时坚持下去。正如我已经说过的,它是不变的。

关于C++如何获取父数据类型的sizeof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47822012/

相关文章:

c++ - 对 vector 中的增量值

c++ - 按姓氏然后名字对结构进行排序

C++ 在 switch 语句中,cin.getline 不分配给 c 字符串变量

c++ - 插入多个输出流?

c++ - 当我向 <vector> 添加对象时出现段错误

安卓RotateDrawable : Doesn't correctly work for Vector Drawables

c++ - 如何存储对象供以后使用并使它们可搜索

c++ - 在 std::map 中存储结构实例

c++ - 调试霍纳规则程序

c++ - 如何配置 NAR Maven 项目?