unreachable!宏的存在纯粹是为了在阅读代码时保持清晰,还是提供了任何功能优势?

推荐答案

是的,unreachable! macro(也有unimplemented!)纯粹是为了清晰起见.他们是implemented直接转发到panic!.

#[macro_export]
#[stable(feature = "rust1", since = "1.0.0")]
macro_rules! unreachable {
    () => ({
        panic!("internal error: entered unreachable code")
    });
    ($msg:expr) => ({
        unreachable!("{}", $msg)
    });
    ($fmt:expr, $($arg:tt)*) => ({
        panic!(concat!("internal error: entered unreachable code: ", $fmt), $($arg)*)
    });
}

#[macro_export]
#[stable(feature = "rust1", since = "1.0.0")]
macro_rules! unimplemented {
    () => (panic!("not yet implemented"))
}

不要与unreachable intrinsic(可通过unreachabledebug_unreachable crate 在稳定的 rust 迹中接近)混淆,后者不安全地断言分支完全不可接近.这允许在优化时完全删除分支.如果断言被证明是错误的,那么它可能会导致未定义的行为,相比之下,unreachable!()只会让人panic .

Rust相关问答推荐

有没有方法处理rust中嵌套的ok_or()?

如何从使用mockall模拟的方法中返回self?

把Vector3变成Vector4的绝妙方法

关于Rust 中回归的逻辑

这种获取-释放关系是如何运作的?

如果包名称与bin名称相同,并且main.ars位于工作区的同一 crate 中,则无法添加对lib.ars的依赖

使用关联类型重写时特征的实现冲突

如何在Rust中基于字符串 Select struct ?

Rust移动/复制涉及实际复制时进行检测

如何实现Deref;多次;?

是否可以在不直接重复的情况下为许多特定类型实现一个函数?

如何重命名 clap_derive 中的子命令占位符?

Rust LinkedList 中的borrow 判断器错误的原因是什么?

我们可以在 Rust 切片中使用步骤吗?

Rust FFI 和 CUDA C 性能差异

从 Rust 中的 if/else 中的引用创建 MappedRwLockWriteGuard

在 Rust 中,Weak 如何知道内部值何时被删除?

在 Rust 中返回对枚举变体的引用是个好主意吗?

当用作函数参数时,不强制执行与绑定的关联类型

如何重写这个通用参数?