gpt4 book ai didi

c++ - C++ 对象布局是否必须静态定义?

转载 作者:可可西里 更新时间:2023-11-01 15:25:06 25 4
gpt4 key购买 nike

更具体地说,假设 AB 的可访问基类,以下代码是否会产生未定义的行为,并且断言是否保证不会根据标准触发?

void test(B b1, B b2) {
A* a2 = &b2;
auto offset = reinterpret_cast<char*>(a2) - reinterpret_cast<char*>(&b2);
A* a1 = reinterpret_cast<A*>(reinterpret_cast<char*>(&b1) + offset);
assert(a1 == static_cast<A*>(&b1));
}

编辑:我知道所有常见的编译器供应商都以与 test 的隐式假设兼容的方式实现 C++ 对象布局(即使考虑到虚拟继承)。我正在寻找的是标准中此行为的保证(隐式或显式)。或者,对标准提供的对象存储布局保证范围的合理详细描述,作为不保证此行为的证据,也将被接受。

最佳答案

那可能没问题。在某些特定条件下:

A 不是(部分)virtual 基,或者 b1b2 具有相同的大部分派(dispatch)生类型,或者你碰巧(不)幸运。

编辑:您从按引用传递到按值传递的更改使得显示上述条件变得微不足道。

别名规则不会妨碍,因为唯一使用的错误类型是char,并且有一个明确的异常(exception)。

关于c++ - C++ 对象布局是否必须静态定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52018042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com