std::map default value for build-in type

This is defined in the standard, yes. map is performing “default initialization” in this case. As you say, for class types, that calls a no-arguments constructor.

For built-in types, in the ’98 standard, see section 8.5, “Initializers”:

To default-initialize an object of type T means:

  • if T is a non-POD …
  • if T is an array type …
  • otherwise, the storage for the object is zero-initialized

And, previously,

To zero-initialize storage for an object of type T means:

  • if T is a scalar type, the storage is set to the value 0 (zero) converted to T

Scalar types are:

  • Arithmetic types (integer, floating point)
  • Enumeration types
  • Pointer types
  • Pointer to member types

In particular, the behaviour you see with an integer (initialized to zero) is defined by the standard, and you can rely on it.

Leave a Comment