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

std::bit_cast和std::start_lifetime_as之间有什么有用的区别?

  •  0
  • markt1964  · 技术社区  · 5 年前

    std::bit_cast 显然是在c++20中引入的。和 std::start_lifetime_as P0593R5

    对于没有提供有关这些新功能的更多信息,请提前致歉。我只是在看了2019年政协关于双关语的讲座后才听说的,我没能找到很多关于 start_lifetime_as 与谷歌合作。我希望看到这件事的人能知道更多。

    0 回复  |  直到 5 年前
        1
  •  7
  •   Davis Herring    5 年前

    答案很简单: bit_cast start_lifetime_as 改变内存(以一种存在于抽象机器中但不会影响任何物理位的方式)。使用前者(一次)将现有对象解释为一组位;使用后者(永久地)将现有位解释为对象。

        2
  •  4
  •   Parker Coates    5 年前

    std::bit_cast

    float myFloat = 3.14;
    auto asUint = std::bit_cast<uint32_t>(myFloat);
    auto asBytes = std::bit_cast<std::array<char,4>>(myFloat);
    

    myFloat , asUint asBytes 是具有不同地址的独立变量。编译器可能能够完全优化掉一些值,但逻辑上它们是完全不同的值,恰好具有相同的大小和位。

    std::start_lifetime_as