# 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

Loading content...

## 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` 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` 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.

Loading content...

# 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`)