败犬日报 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。