An object in C++ is a region of storage with a type, a value, and possibly a name. In traditional object-oriented programming, "object" means an instance of a class, but in C++ the definition is slightly broader to include instances of any data type.
An object (variable or constant) declaration has two parts: a series of specifiers and a list of comma-separated declarators. Each declarator has a name and an optional initializer.
Each declaration begins with a series of specifiers. The series can contain a storage class,
volatile qualifiers, and the object's type,
in any order.
A storage class specifier can specify scope linkage and
lifetime. The storage class is optional. For function parameters and
local variables in a function, the default storage class specifier
auto. For declarations at
namespace scope, the default is usually an object with static
lifetime and external linkage. C++ has no explicit storage class for
such a declaration. (See Section 2.6.4 later in this
chapter and Section 2.4
earlier in this chapter for more information.) If you use a storage
class specifier, you must choose only one of the following:
Denotes an automatic variable—that is, a variable with a
lifetime limited to the block in which the variable is
auto specifier is the default for function parameters and local variables, which are the only kinds of declarations for which it can be used, so it is rarely used explicitly. ...