You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中函数返回类型处的感叹号‘!’有什么作用?

Rust中函数返回值-> !里感叹号的作用

这个!是Rust的发散类型(Never Type),专门用来标记那些永远不会正常返回的函数。

拿你贴的代码来说:wait_forever里是一个无限循环,调用asm::wfe()后会一直停在循环里,永远不会退出并返回任何值。用-> !告诉编译器:一旦调用这个函数,后续的代码绝对不会被执行到。

关于发散类型还有几个实用的点:

  • 它可以隐式转换成任意类型,所以你能把返回!的函数放在需要任何类型的分支里,比如:
    fn get_valid_number() -> u32 {
        let input = get_user_input();
        if let Ok(num) = input.parse() {
            num
        } else {
            panic!("无效输入"); // panic!的类型是!,能转成u32填充这个分支
        }
    }
    
  • 别把它和宏后面的!搞混:像panic!()、println!()这类宏的!是Rust用来区分宏和普通函数的语法标记,和返回值里的发散类型!完全是两回事。
  • 除了无限循环,像调用std::process::exit()(直接终止程序)、std::panic::panic_any()这类不会返回的函数,它们的返回类型也都是!。

内容的提问来源于stack exchange,提问作者simgar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:13:13