#编译时 #大小 #特性 #确定 #未来 #实现 #

size-of-trait

在编译时确定未来或特性实现的尺寸

5个稳定版本

1.1.3 2024年1月21日
1.1.2 2022年9月1日
1.0.0 2021年9月9日

#3 in #确定

每月 25 次下载

BSD-3-Clause

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.

无运行时依赖