5个稳定版本
1.1.3 | 2024年1月21日 |
---|---|
1.1.2 | 2022年9月1日 |
1.0.0 | 2021年9月9日 |
#3 in #确定
每月 25 次下载
7KB
112 代码行
size-of-trait-impl
一个微小的crate,用于确定不可命名的类型的大小。
它看起来像什么?
use size_of_trait::size_of;
const A: usize = size_of!(f());
const B: usize = size_of!(0_u8);
fn main() {
assert_eq!(A, 2);
assert_eq!(B, 1);
}
async fn f() {
let x = 1;
std::future::ready(()).await;
let y = 2;
}
为什么不使用 std::mem::size_of_val
?
size_of_val
不能在大多数const
上下文中使用,因为未来不能在编译时构造。size_of_val
需要你有一个值;你必须创建一个永远不会轮询的未来。
#![feature(const_size_of_val)]
async fn foo() {} // error: cannot call non-const fn `foo` in constants
const SIZE: usize = std::mem::size_of_val(&foo()); // error: constants cannot evaluate destructors
size_of!
完全不会评估其参数,并且可以在 const 上下文中使用。
MSRV
1.54 (for doc = include_str!
). This can be easily lowered to 1.31 (for const fn
) if someone finds it useful.