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

这是未定义的行为吗?(将const从临时绑定中强制转换为const引用)

  •  -4
  • user24551355  · 技术社区  · 2 年前

    是否未定义以下代码

    auto main() -> int {
        const_cast<int&>(static_cast<int const&>(42)) = 21; return 0;
    }
    

    我给一个临时值赋值,这个临时值绑定到一个常量的左值,然后给它赋值生命的意义。

    我需要这个吗?不,只是好奇心害死了我。这是UB吗?

    1 回复  |  直到 2 年前
        1
  •  3
  •   HolyBlackCat    2 年前

    在我看来是合法的。

    [conv.rval] 表示在临时物化之后,生成的xvalue具有与原始prvalue相同的类型。

    类型T的prvalue可以转换为类型T的xvalue。

    42 非常数 int prvalue,并且它仍然是一个非常数 int 在被物化为xvalue之后。