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

编程入门 行业动态 更新时间:2024-10-26 03:24:03
本文介绍了声明未初始化变量的更好方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

Some libc functions, e.g. sigemptyset(set: *mut sigset_t) take a pointer to a variable, treat it as uninitialized and initialize it.

我最终得到以下代码:

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

这没关系,但是当我拥有许多这些变量时,最终得到的是这样的东西:

This is ok, but when I have many of those variables I end up with something like this:

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.

Is there a nicer way to write this code? For educational purposes I explicitly want to use libc.

推荐答案

幸运的是,元组也是普通类型.那么:

Luckily, tuples are normal types, too. So how about:

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

但是,没有比这更好的了.最好的选择是将所有变量组合成更大的类型(例如元组或结构),然后将其取消初始化.

However, it won't get much nicer than this. Your best bet is to combine all your variables into a bigger type (like a tuple or a struct) and un-initialize that.

但是,不安全的东西冗长而烦人是可以的.未初始化的变量确实非常危险,尤其是在处理Drop类型时.我确定您已经知道了,但是我仍然要确保每个人都阅读 uninitialized() 的文档以了解所有可能的陷阱.

But it's fine that unsafe things are verbose and annoying to write. Uninitialized variables are really quite dangerous, especially when dealing with Drop types. I am sure you are already aware, but I still want to make sure everyone reads the documentation of uninitialized() to understand all possible pitfalls.

更多推荐

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

本文发布于:2023-11-14 03:05:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1586045.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:初始化   变量   声明   方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!