相关疑难解决方法(0)

当A和B“相同”时断言(sizeof(A)== sizeof(B))是否安全?

假设我有两个类,它们的内存布局应该完全相同:

struct A {
    int x;
    int y;
};

/* possibly more code */

struct B {
    int a;
    int b;
};
Run Code Online (Sandbox Code Playgroud)

标准中是否有什么可以保证我可以安全地使用static_assert(sizeof(A) == sizeof(B))

作为较弱的变体,请考虑

struct C {
    int a;
};

static_assert( sizeof(A) >= sizeof(C) );   // can this ever fail?
static_assert( sizeof(A) >  sizeof(C) );   // can this ever fail?
Run Code Online (Sandbox Code Playgroud)

这个问题引发了这个问题。我天真地希望不会有任何断言失败,但是可以保证吗?

c++ sizeof language-lawyer

18
推荐指数
1
解决办法
501
查看次数

布局兼容类型的目的是什么?

该标准定义了两种类型的布局兼容性.但是,我没有看到标准中的任何地方,当两种类型的布局兼容时后果是什么.似乎布局兼容是一种在任何地方都不使用的定义.

布局兼容的目的是什么?

注意:据说,它可能意味着类型具有相同的布局(offsetof对于每个相应的成员是相同的),因此,例如,对于简单的可复制类型,可以在它们之间复制基础字节.但是我没有在标准中看到这样的东西.

c++ struct memory-layout language-lawyer c++17

6
推荐指数
1
解决办法
300
查看次数

标签 统计

c++ ×2

language-lawyer ×2

c++17 ×1

memory-layout ×1

sizeof ×1

struct ×1