< 返回版块

lj94093 发表于 2020-07-11 18:44

Tags:PhantomData,生命周期

rust官方文档中有一个这样的实现介绍PhantomData

官方文档链接

struct Slice<'a, T> {
    start: *const T,
    end: *const T,
}

原文中说到上述代码使用了一个生命周期,但没有使用到它.

我想问的是,为什么这里的生命周期a不能直接应用到类型T上,比如说这样:

struct Slice<'a, T: 'a> {
    start: *const T,
    end: *const T,
}

评论区

写评论
whfuyn 2020-07-14 20:42

PhatomData

However because 'a is unused within the struct's body, it's unbounded. Because of the troubles this has historically caused, unbounded lifetimes and types are forbidden in struct definitions. Therefore we must somehow refer to these types in the body.

Nomicon里写了:因为'a没有在结构体里用到,它是无约束的,这曾导致了很多问题,所以无约束的生命周期和类型在struct定义里被禁止了,所以必须在结构体里想办法引用它们。

另外,生命周期并不只限于引用,我有一篇翻译了一半的文章讲了这个,虽然还没翻译完,但这部分内容翻译到了,在第三节,可以看一下,如果翻译有什么错误也可以告诉我,英文原文可以在同目录下找到。

Rust生命周期常见误解

--
👇
lj94093: 哦哦,明白了,难怪官方文档中的例子要写成phantom: PhantomData<&'a T>, 感谢大佬

--
👇
YRainbbbb: 生命周期的语法书写的时候只跟引用有关,所以这里除非T是个引用

作者 lj94093 2020-07-11 18:54

哦哦,明白了,难怪官方文档中的例子要写成phantom: PhantomData<&'a T>, 感谢大佬

--
👇
YRainbbbb: 生命周期的语法书写的时候只跟引用有关,所以这里除非T是个引用

Cupnfish 2020-07-11 18:52

生命周期的语法书写的时候只跟引用有关,所以这里除非T是个引用

1 共 3 条评论, 1 页