Skip to content

败犬日报 2025-06-08

1. CS144 的一段未定义行为代码

cpp
Reader& ByteStream::reader()
{
  static_assert( sizeof( Reader ) == sizeof( ByteStream ),
                 "Please add member variables to the ByteStream base, not the ByteStream Reader." );

  return static_cast<Reader&>( *this ); // NOLINT(*-downcast)
}

Reader 是 ByteStream 的子类(且没有新增成员变量),但是调用 ByteStream::reader 的类型是 ByteStream。

这是 UB,比较危险,可以看 https://en.cppreference.com/w/cpp/language/static_cast.html