小编hfu*_*uda的帖子

泛型函数的不同实例是否可能具有不同的静态变量?

当我在泛型函数中使用静态变量时,泛型函数的每个实例中的变量的实体都是相同的.

例如,在此代码中

fn foo<T>() {
    use std::sync::{Once, ONCE_INIT};

    static INIT: Once = ONCE_INIT;

    INIT.call_once(|| {
        // run initialization here
        println!("Called");
    });
}

fn main() {
    foo::<i64>();
    foo::<i64>();
    foo::<isize>();
}
Run Code Online (Sandbox Code Playgroud)

println! 只召唤一次.

我已经使用Rust playground检查了汇编代码,并看到INIT变量T实际上与哪种类型无关,尽管foo<T>它们本身用不同的名称实例化.

是否有可能通用函数的不同实例具有不同的静态变量,因此println!在上面的示例中调用两次?

rust

10
推荐指数
1
解决办法
377
查看次数

标签 统计

rust ×1