class keyword — Declares a class or template parameter, or elaborates a type name
class-specifier ::= class-head { [member-specification] } class-head ::= class-key [identifier] [base-clause] | class-key nested-name :: identifier [base-clause] | class-key [nested-name ::] template-id [base-clause] class-key ::= class | struct | union member-specification ::= member-decl [member-specification] | access-specifier : [member-specification] member-decl ::= [decl-specifier-seq] [member-declarator-list] ; | function-definition [;] | qualified-id ; | using-decl | template-decl member-declarator-list ::= member-declarator | member-declarator-list , member-declarator member-declarator ::= declarator [= 0] | declarator [= constant-expression] | [identifier] : constant-expression base-clause ::= : base-specifier-list base-specifier-list ::= base-specifier | base-specifier-list , base-specifier base-specifier ::= [base-modifiers] [::] [nested-name ::] class-name base-modifiers ::= virtual [access-specifier] | access-specifier [virtual] access-specifier ::= private | protected | public class-name ::= identifier | template-id type-parm := class [identifier] [= type-id] | template < template-parm-list > class [identifier] [= id-expression] elaborated-type-specifier := class-key [::] [nested-name ::] identifier | class-key [::] [nested-name ::] [template] template-id
The class
keyword introduces
a class declaration or definition, names a type template parameter
(type-parm
), or names a class
type in an elaborated-type-specifier
. In a class
definition, the only difference
between class
and struct
is that the default access level is
private for class
and public for
struct
.
When declaring a type template parameter, typename
and class
are
interchangeable.