代码之家  ›  专栏  ›  技术社区  ›  tsuki

空基优化子对象的地址

  •  1
  • tsuki  · 技术社区  · 5 年前

    假设我有一个价值观:

    int i = 0;
    

    struct Empty{
      // stuff that passes
      // static_assert( std::is_empty<Empty>::value );
     };
    

    是否合法:

    Empty& e = *reinterpret_cast<Empty*>(reinterpret_cast<void*>(&i)); //?
    // do stuff with e
    
    1 回复  |  直到 5 年前
        1
  •  5
  •   Stephan Lechner    5 年前

    根据这个 online C++ standard draft

    (7) 将指针类型为T1的prvalue转换为指针类型 到T2(其中T1和T2是对象类型,并且 原始类型生成原始指针值。

    这意味着,演员本身 int* Empty* Empty 没有比 int ,稍后您可以返回到 内景*

    但是,请注意,这并不意味着您可以访问/取消引用 空的* -对象(因为它不是 -指针指向的对象)。

    所以纯cast是可以的,但是取消引用它会产生UB。