【发布时间】:2016-04-28 20:07:22
【问题描述】:
以下代码在 amd64 上与 Rust 1.8 一起正常工作。
use std::mem;
fn main() {
let f: u8 = unsafe { mem::transmute(false) };
let t: u8 = unsafe { mem::transmute(true) };
assert_eq!(0, f);
assert_eq!(1, t);
}
我的问题是,我可以假设这将始终有效吗?我试图找到关于bool表示的参考,但我只找到了this和this,但我认为这并不权威。
【问题讨论】:
-
你为什么要这样做? (插入夸张的喘息。)
-
为bool创建一个紧凑的选项类型,类似于github.com/llogiq/optional。可选的 crate 使用枚举,但不允许返回对内部值的引用。
-
看不到与
let f: u8 = if boolValue { 1u8 } else { 0u8 }之类的功能有任何区别(不确定确切的 rust 语法)。但是没有 transmute 的版本可以在不依赖任何编译器行为的情况下工作。 -
我需要转换来达到我在另一条评论中描述的目的。
标签: rust