当前位置:  开发笔记 > 后端 > 正文

声明未初始化变量的更好方法

如何解决《声明未初始化变量的更好方法》经验,为你挑选了1个好方法。

一些libc函数,例如,sigemptyset(set: *mut sigset_t)获取指向变量的指针,将其视为未初始化并初始化它.

我最终得到这个代码:

let mut newmask = std::mem::uninitialized();
libc::sigemptyset(&mut newmask);

这没关系,但是当我有很多这些变量时,我最终会得到这样的结果:

let mut newmask = std::mem::uninitialized();
let mut oldmask = std::mem::uninitialized();
let mut pendmask = std::mem::uninitialized();

我可以压缩它:

use std::mem::unitialized as uninit;
let (mut newmask, mut oldmask, mut pendmask) = (uninit(), uninit(), uninit());

有没有更好的方法来编写这段代码?出于教育目的,我明确地想要使用libc.



1> Lukas Kalber..:

幸运的是,元组也是正常类型.那怎么样:

let (mut newmask, mut oldmask, mut pendmask) = std::mem::uninitialized();

但是,它不会比这更好.最好的办法是将所有变量组合成一个更大的类型(如元组或结构)并取消初始化.

但是,不安全的事情写得很冗长,很烦人.未初始化的变量确实非常危险,特别是在处理Drop类型时.我相信你已经知道了,但我仍然想确保每个人都阅读文档uninitialized()以了解所有可能的陷阱.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有