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
Loading content...

## Implementations on Foreign Types

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

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

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

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

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

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

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 System`[src]

#### `fn default() -> System`[src]

### `impl Default for Box<str>`[src]

#### `fn default() -> Box<str>`[src]

### `impl Default for Box<CStr>`[src]

#### `fn default() -> Box<CStr>`[src]

### `impl Default for Box<OsStr>`[src]

#### `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 AtomicI128`[src]

#### `fn default() -> AtomicI128`[src]

### `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 AtomicU128`[src]

#### `fn default() -> AtomicU128`[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 &'_ CStr`[src]

#### `fn default() -> Self`[src]

### `impl<'_> Default for &'_ OsStr`[src]

#### `fn default() -> Self`[src]

Creates an empty `OsStr`.

### `impl<'_> Default for &'_ mut str`[src]

#### `fn default() -> &'_ mut str`[src]

Creates an empty mutable str

### `impl<'_, B> Default for Cow<'_, B> where
B: ToOwned + ?Sized,
<B as ToOwned>::Owned: Default,` [src]

#### `fn default() -> Cow<'_, B>`[src]

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

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

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

Creates an empty slice.

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

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

Creates a mutable empty slice.

### `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 std::collections::HashMap<K, V, S> where
S: 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`.

# Examples

    let opt: Option<u32> = Option::default();
    assert!(opt.is_none());

Run

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

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

### `impl<T> Default for Box<T> where
T: Default,` [src]

#### `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 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 BinaryHeap<T> where
T: Ord,` [src]

#### `fn default() -> BinaryHeap<T>`[src]

Creates an empty `BinaryHeap<T>`.

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

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

#### `fn default() -> Vec<T>`[src]

Creates an empty `Vec<T>`.

### `impl<T, S> Default for std::collections::HashSet<T, S> where
S: 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 Cursor<T>`[src]

#### `fn default() -> Cursor<T>`[src]

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