std::default::Default - Rust
Description: API documentation for the Rust `Default` trait in crate `std`.
Keywords: rust, rustlang, rust-lang, Default

# 1.0.0[−][src]Trait std::default::Default

    pub trait Default {
        fn default() -> Self;
    }

A trait for giving a type a useful default value.

Sometimes, you want to fall back to some kind of default value, and don't particularly care what it is. This comes up often with `struct`s that define a set of options:

    struct SomeOptions {
        foo: i32,
        bar: f32,
    }Run

How can we define some default values? You can use `Default`:

    #[derive(Default)]
    struct SomeOptions {
        foo: i32,
        bar: f32,
    }

    fn main() {
        let options: SomeOptions = Default::default();
    }Run

Now, you get all of the default values. Rust implements `Default` for various primitives types.

If you want to override a particular option, but still retain the other defaults:

    fn main() {
        let options = SomeOptions { foo: 42, ..Default::default() };
    }Run

## Derivable

This trait can be used with `#[derive]` if all of the type's fields implement `Default`. When `derive`d, it will use the default value for each field's type.

## How can I implement `Default`?

Provide an implementation for the `default()` method that returns the value of your type that should be the default:

    enum Kind {
        A,
        B,
        C,
    }

    impl Default for Kind {
        fn default() -> Self { Kind::A }
    }Run

# Examples

    #[derive(Default)]
    struct SomeOptions {
        foo: i32,
        bar: f32,
    }Run

## Required Methods

### `fn default() -> Self`

Returns the "default value" for a type.

Default values are often some kind of initial value, identity value, or anything else that may make sense as a default.

# Examples

Using built-in default values:

    let i: i8 = Default::default();
    let (x, y): (Option<String>, f64) = Default::default();
    let (a, b, (c, d)): (i32, u32, (bool, bool)) = Default::default();Run

Making your own:

    enum Kind {
        A,
        B,
        C,
    }

    impl Default for Kind {
        fn default() -> Self { Kind::A }
    }Run

## Implementors

###

`impl Default for bool`

[src]

####

`fn default() -> bool`

[src]

Returns the default value of `false`

###

`impl Default for char`

[src]

####

`fn default() -> char`

[src]

Returns the default value of `\x00`

###

`impl Default for f32`

[src]

####

`fn default() -> f32`

[src]

Returns the default value of `0.0`

###

`impl Default for f64`

[src]

####

`fn default() -> f64`

[src]

Returns the default value of `0.0`

###

`impl Default for i128`

[src]

####

`fn default() -> i128`

[src]

Returns the default value of `0`

###

`impl Default for i16`

[src]

####

`fn default() -> i16`

[src]

Returns the default value of `0`

###

`impl Default for i32`

[src]

####

`fn default() -> i32`

[src]

Returns the default value of `0`

###

`impl Default for i64`

[src]

####

`fn default() -> i64`

[src]

Returns the default value of `0`

###

`impl Default for i8`

[src]

####

`fn default() -> i8`

[src]

Returns the default value of `0`

###

`impl Default for isize`

[src]

####

`fn default() -> isize`

[src]

Returns the default value of `0`

###

`impl Default for u128`

[src]

####

`fn default() -> u128`

[src]

Returns the default value of `0`

###

`impl Default for u16`

[src]

####

`fn default() -> u16`

[src]

Returns the default value of `0`

###

`impl Default for u32`

[src]

####

`fn default() -> u32`

[src]

Returns the default value of `0`

###

`impl Default for u64`

[src]

####

`fn default() -> u64`

[src]

Returns the default value of `0`

###

`impl Default for u8`

[src]

####

`fn default() -> u8`

[src]

Returns the default value of `0`

###

`impl Default for ()`

[src]

####

`fn default()`

[src]

Returns the default value of `()`

###

`impl Default for usize`

[src]

####

`fn default() -> usize`

[src]

Returns the default value of `0`

###

`impl Default for Global`

[src]

####

`fn default() -> Global`

[src]

###

`impl Default for Box<str>`

[src]

####
ⓘImportant traits for Box<I>

### Important traits for Box<I>

`impl<I> Iterator for Box<I> where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>`

`fn default() -> Box<str>`

[src]

###

`impl Default for Box<CStr>`

[src]

####
ⓘImportant traits for Box<I>

### Important traits for Box<I>

`impl<I> Iterator for Box<I> where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>`

`fn default() -> Box<CStr>`

[src]

###

`impl Default for Box<OsStr>`

[src]

####
ⓘImportant traits for Box<I>

### Important traits for Box<I>

`impl<I> Iterator for Box<I> where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>`

`fn default() -> Box<OsStr>`

[src]

###

`impl Default for DefaultHasher`

[src]

####

`fn default() -> DefaultHasher`

[src]

Creates a new `DefaultHasher` using `new`. See its documentation for more.

###

`impl Default for RandomState`

[src]

####

`fn default() -> RandomState`

[src]

Constructs a new `RandomState`.

###

`impl Default for CString`

[src]

####

`fn default() -> CString`

[src]

Creates an empty `CString`.

###

`impl Default for OsString`

[src]

####

`fn default() -> OsString`

[src]

Constructs an empty `OsString`.

###

`impl Default for Error`

[src]

####

`fn default() -> Error`

[src]

###

`impl Default for SipHasher`

[src]

####

`fn default() -> SipHasher`

[src]

###

`impl Default for PathBuf`

[src]

####

`fn default() -> Self`

[src]

###

`impl Default for String`

[src]

####

`fn default() -> String`

[src]

Creates an empty `String`.

###

`impl Default for AtomicBool`

[src]

####

`fn default() -> AtomicBool`

[src]

Creates an `AtomicBool` initialized to `false`.

###

`impl Default for AtomicI16`

[src]

####

`fn default() -> AtomicI16`

[src]

###

`impl Default for AtomicI32`

[src]

####

`fn default() -> AtomicI32`

[src]

###

`impl Default for AtomicI64`

[src]

####

`fn default() -> AtomicI64`

[src]

###

`impl Default for AtomicI8`

[src]

####

`fn default() -> AtomicI8`

[src]

###

`impl Default for AtomicIsize`

[src]

####

`fn default() -> AtomicIsize`

[src]

###

`impl Default for AtomicU16`

[src]

####

`fn default() -> AtomicU16`

[src]

###

`impl Default for AtomicU32`

[src]

####

`fn default() -> AtomicU32`

[src]

###

`impl Default for AtomicU64`

[src]

####

`fn default() -> AtomicU64`

[src]

###

`impl Default for AtomicU8`

[src]

####

`fn default() -> AtomicU8`

[src]

###

`impl Default for AtomicUsize`

[src]

####

`fn default() -> AtomicUsize`

[src]

###

`impl Default for Condvar`

[src]

####

`fn default() -> Condvar`

[src]

Creates a `Condvar` which is ready to be waited on and notified.

###

`impl Default for Duration`

[src]

####

`fn default() -> Duration`

[src]

###

`impl<'_> Default for &'_ str`

[src]

####

`fn default() -> &'_ str`

[src]

Creates an empty str

###

`impl<'_> Default for &'_ mut str`

[src]

####

`fn default() -> &'_ mut str`

[src]

Creates an empty mutable str

###

`impl<'_, T> Default for &'_ [T]`

[src]

####
ⓘImportant traits for &'a [u8]

### Important traits for &'a [u8]

`impl<'a> Read for &'a [u8]impl<'a> Write for &'a mut [u8]`

`fn default() -> &'_ [T]`

[src]

Creates an empty slice.

###

`impl<'_, T> Default for &'_ mut [T]`

[src]

####
ⓘImportant traits for &'a [u8]

### Important traits for &'a [u8]

`impl<'a> Read for &'a [u8]impl<'a> Write for &'a mut [u8]`

`fn default() -> &'_ mut [T]`

[src]

Creates a mutable empty slice.

###

`impl<'a> Default for &'a CStr`

[src]

####

`fn default() -> &'a CStr`

[src]

###

`impl<'a> Default for &'a OsStr`

[src]

####

`fn default() -> &'a OsStr`

[src]

Creates an empty `OsStr`.

###

`impl<'a, B> Default for Cow<'a, B> where B: ToOwned + ?Sized, <B as ToOwned>::Owned: Default,`

[src]

####

`fn default() -> Cow<'a, B>`

[src]

Creates an owned Cow<'a, B> with the default value for the contained owned value.

###

`impl<A> Default for (A,) where A: Default,`

[src]

####

`fn default() -> (A,)`

[src]

###

`impl<A, B> Default for (A, B) where A: Default, B: Default,`

[src]

####

`fn default() -> (A, B)`

[src]

###

`impl<A, B, C> Default for (A, B, C) where A: Default, B: Default, C: Default,`

[src]

####

`fn default() -> (A, B, C)`

[src]

###

`impl<A, B, C, D> Default for (A, B, C, D) where A: Default, B: Default, C: Default, D: Default,`

[src]

####

`fn default() -> (A, B, C, D)`

[src]

###

`impl<A, B, C, D, E> Default for (A, B, C, D, E) where A: Default, B: Default, C: Default, D: Default, E: Default,`

[src]

####

`fn default() -> (A, B, C, D, E)`

[src]

###

`impl<A, B, C, D, E, F> Default for (A, B, C, D, E, F) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default,`

[src]

####

`fn default() -> (A, B, C, D, E, F)`

[src]

###

`impl<A, B, C, D, E, F, G> Default for (A, B, C, D, E, F, G) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default,`

[src]

####

`fn default() -> (A, B, C, D, E, F, G)`

[src]

###

`impl<A, B, C, D, E, F, G, H> Default for (A, B, C, D, E, F, G, H) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default,`

[src]

####

`fn default() -> (A, B, C, D, E, F, G, H)`

[src]

###

`impl<A, B, C, D, E, F, G, H, I> Default for (A, B, C, D, E, F, G, H, I) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default,`

[src]

####

`fn default() -> (A, B, C, D, E, F, G, H, I)`

[src]

###

`impl<A, B, C, D, E, F, G, H, I, J> Default for (A, B, C, D, E, F, G, H, I, J) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default,`

[src]

####

`fn default() -> (A, B, C, D, E, F, G, H, I, J)`

[src]

###

`impl<A, B, C, D, E, F, G, H, I, J, K> Default for (A, B, C, D, E, F, G, H, I, J, K) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default, K: Default,`

[src]

####

`fn default() -> (A, B, C, D, E, F, G, H, I, J, K)`

[src]

###

`impl<A, B, C, D, E, F, G, H, I, J, K, L> Default for (A, B, C, D, E, F, G, H, I, J, K, L) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default, K: Default, L: Default,`

[src]

####

`fn default() -> (A, B, C, D, E, F, G, H, I, J, K, L)`

[src]

###

`impl<H> Default for BuildHasherDefault<H>`

[src]

####

`fn default() -> BuildHasherDefault<H>`

[src]

###

`impl<K, V> Default for BTreeMap<K, V> where K: Ord,`

[src]

####

`fn default() -> BTreeMap<K, V>`

[src]

Creates an empty `BTreeMap<K, V>`.

###

`impl<K, V, S> Default for HashMap<K, V, S> where K: Eq + Hash, S: BuildHasher + Default,`

[src]

####

`fn default() -> HashMap<K, V, S>`

[src]

Creates an empty `HashMap<K, V, S>`, with the `Default` value for the hasher.

###

`impl<T> Default for Option<T>`

[src]

####

`fn default() -> Option<T>`

[src]

Returns `None`.

###

`impl<T> Default for [T; 0]`

[src]

####

`fn default() -> [T; 0]`

[src]

###

`impl<T> Default for [T; 1] where T: Default,`

[src]

####

`fn default() -> [T; 1]`

[src]

###

`impl<T> Default for [T; 2] where T: Default,`

[src]

####

`fn default() -> [T; 2]`

[src]

###

`impl<T> Default for [T; 3] where T: Default,`

[src]

####

`fn default() -> [T; 3]`

[src]

###

`impl<T> Default for [T; 4] where T: Default,`

[src]

####

`fn default() -> [T; 4]`

[src]

###

`impl<T> Default for [T; 5] where T: Default,`

[src]

####

`fn default() -> [T; 5]`

[src]

###

`impl<T> Default for [T; 6] where T: Default,`

[src]

####

`fn default() -> [T; 6]`

[src]

###

`impl<T> Default for [T; 7] where T: Default,`

[src]

####

`fn default() -> [T; 7]`

[src]

###

`impl<T> Default for [T; 8] where T: Default,`

[src]

####

`fn default() -> [T; 8]`

[src]

###

`impl<T> Default for [T; 9] where T: Default,`

[src]

####

`fn default() -> [T; 9]`

[src]

###

`impl<T> Default for [T; 10] where T: Default,`

[src]

####

`fn default() -> [T; 10]`

[src]

###

`impl<T> Default for [T; 11] where T: Default,`

[src]

####

`fn default() -> [T; 11]`

[src]

###

`impl<T> Default for [T; 12] where T: Default,`

[src]

####

`fn default() -> [T; 12]`

[src]

###

`impl<T> Default for [T; 13] where T: Default,`

[src]

####

`fn default() -> [T; 13]`

[src]

###

`impl<T> Default for [T; 14] where T: Default,`

[src]

####

`fn default() -> [T; 14]`

[src]

###

`impl<T> Default for [T; 15] where T: Default,`

[src]

####

`fn default() -> [T; 15]`

[src]

###

`impl<T> Default for [T; 16] where T: Default,`

[src]

####

`fn default() -> [T; 16]`

[src]

###

`impl<T> Default for [T; 17] where T: Default,`

[src]

####

`fn default() -> [T; 17]`

[src]

###

`impl<T> Default for [T; 18] where T: Default,`

[src]

####

`fn default() -> [T; 18]`

[src]

###

`impl<T> Default for [T; 19] where T: Default,`

[src]

####

`fn default() -> [T; 19]`

[src]

###

`impl<T> Default for [T; 20] where T: Default,`

[src]

####

`fn default() -> [T; 20]`

[src]

###

`impl<T> Default for [T; 21] where T: Default,`

[src]

####

`fn default() -> [T; 21]`

[src]

###

`impl<T> Default for [T; 22] where T: Default,`

[src]

####

`fn default() -> [T; 22]`

[src]

###

`impl<T> Default for [T; 23] where T: Default,`

[src]

####

`fn default() -> [T; 23]`

[src]

###

`impl<T> Default for [T; 24] where T: Default,`

[src]

####

`fn default() -> [T; 24]`

[src]

###

`impl<T> Default for [T; 25] where T: Default,`

[src]

####

`fn default() -> [T; 25]`

[src]

###

`impl<T> Default for [T; 26] where T: Default,`

[src]

####

`fn default() -> [T; 26]`

[src]

###

`impl<T> Default for [T; 27] where T: Default,`

[src]

####

`fn default() -> [T; 27]`

[src]

###

`impl<T> Default for [T; 28] where T: Default,`

[src]

####

`fn default() -> [T; 28]`

[src]

###

`impl<T> Default for [T; 29] where T: Default,`

[src]

####

`fn default() -> [T; 29]`

[src]

###

`impl<T> Default for [T; 30] where T: Default,`

[src]

####

`fn default() -> [T; 30]`

[src]

###

`impl<T> Default for [T; 31] where T: Default,`

[src]

####

`fn default() -> [T; 31]`

[src]

###

`impl<T> Default for [T; 32] where T: Default,`

[src]

####

`fn default() -> [T; 32]`

[src]

###

`impl<T> Default for Box<[T]>`

[src]

####
ⓘImportant traits for Box<I>

### Important traits for Box<I>

`impl<I> Iterator for Box<I> where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>`

`fn default() -> Box<[T]>`

[src]

###

`impl<T> Default for Box<T> where T: Default,`

[src]

####
ⓘImportant traits for Box<I>

### Important traits for Box<I>

`impl<I> Iterator for Box<I> where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>`

`fn default() -> Box<T>`

[src]

Creates a `Box<T>`, with the `Default` value for T.

###

`impl<T> Default for Cell<T> where T: Default,`

[src]

####

`fn default() -> Cell<T>`

[src]

Creates a `Cell<T>`, with the `Default` value for T.

###

`impl<T> Default for RefCell<T> where T: Default,`

[src]

####

`fn default() -> RefCell<T>`

[src]

Creates a `RefCell<T>`, with the `Default` value for T.

###

`impl<T> Default for UnsafeCell<T> where T: Default,`

[src]

####

`fn default() -> UnsafeCell<T>`

[src]

Creates an `UnsafeCell`, with the `Default` value for T.

###

`impl<T> Default for Reverse<T> where T: Default,`

[src]

####

`fn default() -> Reverse<T>`

[src]

###

`impl<T> Default for BinaryHeap<T> where T: Ord,`

[src]

####

`fn default() -> BinaryHeap<T>`

[src]

Creates an empty `BinaryHeap<T>`.

###

`impl<T> Default for BTreeSet<T> where T: Ord,`

[src]

####

`fn default() -> BTreeSet<T>`

[src]

Makes an empty `BTreeSet<T>` with a reasonable choice of B.

###

`impl<T> Default for LinkedList<T>`

[src]

####

`fn default() -> LinkedList<T>`

[src]

Creates an empty `LinkedList<T>`.

###

`impl<T> Default for VecDeque<T>`

[src]

####

`fn default() -> VecDeque<T>`

[src]

Creates an empty `VecDeque<T>`.

###

`impl<T> Default for Empty<T>`

[src]

####
ⓘImportant traits for Empty<T>

### Important traits for Empty<T>

`impl<T> Iterator for Empty<T> type Item = T;`

`fn default() -> Empty<T>`

[src]

###

`impl<T> Default for PhantomData<T> where T: ?Sized,`

[src]

####

`fn default() -> PhantomData<T>`

[src]

###

`impl<T> Default for ManuallyDrop<T> where T: Default + ?Sized,`

[src]

####

`fn default() -> ManuallyDrop<T>`

[src]

###

`impl<T> Default for Wrapping<T> where T: Default,`

[src]

####

`fn default() -> Wrapping<T>`

[src]

###

`impl<T> Default for Rc<T> where T: Default,`

[src]

####

`fn default() -> Rc<T>`

[src]

Creates a new `Rc<T>`, with the `Default` value for `T`.

# Examples

    use std::rc::Rc;

    let x: Rc<i32> = Default::default();
    assert_eq!(*x, 0);Run

###

`impl<T> Default for std::rc::Weak<T>`

[src]

####

`fn default() -> Weak<T>`

[src]

Constructs a new `Weak<T>`, allocating memory for `T` without initializing it. Calling [`upgrade`][Weak::upgrade] on the return value always gives `None`.

# Examples

    use std::rc::Weak;

    let empty: Weak<i64> = Default::default();
    assert!(empty.upgrade().is_none());Run

###

`impl<T> Default for AtomicPtr<T>`

[src]

####

`fn default() -> AtomicPtr<T>`

[src]

Creates a null `AtomicPtr<T>`.

###

`impl<T> Default for Arc<T> where T: Default,`

[src]

####

`fn default() -> Arc<T>`

[src]

Creates a new `Arc<T>`, with the `Default` value for `T`.

# Examples

    use std::sync::Arc;

    let x: Arc<i32> = Default::default();
    assert_eq!(*x, 0);Run

###

`impl<T> Default for std::sync::Weak<T>`

[src]

####

`fn default() -> Weak<T>`

[src]

Constructs a new `Weak<T>`, without allocating memory. Calling [`upgrade`][Weak::upgrade] on the return value always gives `None`.

# Examples

    use std::sync::Weak;

    let empty: Weak<i64> = Default::default();
    assert!(empty.upgrade().is_none());Run

###

`impl<T> Default for Vec<T>`

[src]

####
ⓘImportant traits for Vec<u8>

### Important traits for Vec<u8>

`impl Write for Vec<u8>`

`fn default() -> Vec<T>`

[src]

Creates an empty `Vec<T>`.

###

`impl<T, S> Default for HashSet<T, S> where T: Eq + Hash, S: BuildHasher + Default,`

[src]

####

`fn default() -> HashSet<T, S>`

[src]

Creates an empty `HashSet<T, S>` with the `Default` value for the hasher.

###

`impl<T: Default> Default for RwLock<T>`

[src]

####

`fn default() -> RwLock<T>`

[src]

Creates a new `RwLock<T>`, with the `Default` value for T.

###

`impl<T: ?Sized + Default> Default for Mutex<T>`

[src]

####

`fn default() -> Mutex<T>`

[src]

Creates a `Mutex<T>`, with the `Default` value for T.

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g. `str,u8` or `String,struct:Vec,test`)