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

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

    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() -> Kind { 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() -> Kind { Kind::A }
    }Run

## Implementors

- `impl Default for ReseedWithDefault`
- `impl<T> Default for BinaryHeap<T> where T: Ord`
- `impl<K, V> Default for BTreeMap<K, V> where K: Ord`
- `impl<T> Default for BTreeSet<T> where T: Ord`
- `impl<'a, B> Default for Cow<'a, B> where B: ToOwned + ?Sized, B::Owned: Default`
- `impl<T> Default for LinkedList<T>`
- `impl Default for String`
- `impl<T> Default for Vec<T>`
- `impl<T> Default for VecDeque<T>`
- `impl<T> Default for std::boxed::Box<T> where T: Default`
- `impl<T> Default for std::boxed::Box<[T]>`
- `impl<T> Default for std::sync::Weak<T>`
- `impl<T> Default for Arc<T> where T: Default`
- `impl<T> Default for Rc<T> where T: Default`
- `impl<T> Default for std::rc::Weak<T>`
- `impl Default for AtomicBool`
- `impl<T> Default for AtomicPtr<T>`
- `impl<T> Default for Cell<T> where T: Copy + Default`
- `impl<T> Default for RefCell<T> where T: Default`
- `impl<T> Default for UnsafeCell<T> where T: Default`
- `impl<T> Default for Empty<T>`
- `impl<T> Default for Option<T>`
- `impl<'a, T> Default for &'a [T]`
- `impl<'a, T> Default for &'a mut [T]`
- `impl<'a> Default for &'a str`
- `impl<H> Default for BuildHasherDefault<H>`
- `impl<T> Default for Wrapping<T> where T: Default`
- `impl<T> Default for PhantomData<T> where T: ?Sized`
- `impl Default for ()`
- `impl Default for bool`
- `impl Default for char`
- `impl Default for usize`
- `impl Default for u8`
- `impl Default for u16`
- `impl Default for u32`
- `impl Default for u64`
- `impl Default for u128`
- `impl Default for isize`
- `impl Default for i8`
- `impl Default for i16`
- `impl Default for i32`
- `impl Default for i64`
- `impl Default for i128`
- `impl Default for f32`
- `impl Default for f64`
- `impl<T> Default for [T; 32] where T: Default`
- `impl<T> Default for [T; 31] where T: Default`
- `impl<T> Default for [T; 30] where T: Default`
- `impl<T> Default for [T; 29] where T: Default`
- `impl<T> Default for [T; 28] where T: Default`
- `impl<T> Default for [T; 27] where T: Default`
- `impl<T> Default for [T; 26] where T: Default`
- `impl<T> Default for [T; 25] where T: Default`
- `impl<T> Default for [T; 24] where T: Default`
- `impl<T> Default for [T; 23] where T: Default`
- `impl<T> Default for [T; 22] where T: Default`
- `impl<T> Default for [T; 21] where T: Default`
- `impl<T> Default for [T; 20] where T: Default`
- `impl<T> Default for [T; 19] where T: Default`
- `impl<T> Default for [T; 18] where T: Default`
- `impl<T> Default for [T; 17] where T: Default`
- `impl<T> Default for [T; 16] where T: Default`
- `impl<T> Default for [T; 15] where T: Default`
- `impl<T> Default for [T; 14] where T: Default`
- `impl<T> Default for [T; 13] where T: Default`
- `impl<T> Default for [T; 12] where T: Default`
- `impl<T> Default for [T; 11] where T: Default`
- `impl<T> Default for [T; 10] where T: Default`
- `impl<T> Default for [T; 9] where T: Default`
- `impl<T> Default for [T; 8] where T: Default`
- `impl<T> Default for [T; 7] where T: Default`
- `impl<T> Default for [T; 6] where T: Default`
- `impl<T> Default for [T; 5] where T: Default`
- `impl<T> Default for [T; 4] where T: Default`
- `impl<T> Default for [T; 3] where T: Default`
- `impl<T> Default for [T; 2] where T: Default`
- `impl<T> Default for [T; 1] where T: Default`
- `impl<T> Default for [T; 0]`
- `impl Default for AtomicI8`
- `impl Default for AtomicU8`
- `impl Default for AtomicI16`
- `impl Default for AtomicU16`
- `impl Default for AtomicI32`
- `impl Default for AtomicU32`
- `impl Default for AtomicI64`
- `impl Default for AtomicU64`
- `impl Default for AtomicIsize`
- `impl Default for AtomicUsize`
- `impl Default for SipHasher13`
- `impl Default for SipHasher24`
- `impl Default for SipHasher`
- `impl Default for Error`
- `impl<A> Default for (A,) where A: Default`
- `impl<A, B> Default for (A, B) where A: Default, B: Default`
- `impl<A, B, C> Default for (A, B, C) where A: Default, B: Default, C: Default`
- `impl<A, B, C, D> Default for (A, B, C, D) where A: Default,
  B: Default,
  C: Default,
  D: Default`
- `impl<A, B, C, D, E> Default for (A, B, C, D, E) where A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default`
- `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`
- `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`
- `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`
- `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`
- `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`
- `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`
- `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`
- `impl<K, V, S> Default for HashMap<K, V, S> where K: Eq + Hash,
  S: BuildHasher + Default`
- `impl Default for DefaultHasher`
- `impl Default for RandomState`
- `impl<T, S> Default for HashSet<T, S> where T: Eq + Hash,
  S: BuildHasher + Default`
- `impl<'a> Default for &'a CStr`
- `impl Default for CString`
- `impl Default for OsString`
- `impl<'a> Default for &'a OsStr`
- `impl Default for Condvar`
- `impl<T: ?Sized + Default> Default for Mutex<T>`
- `impl<T: Default> Default for RwLock<T>`
- `impl Default for Duration`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand 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`)