Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/keyword"

From cppreference.com
< cpp
m ("auto" + (3) = C++20 new meaning added)
m (clarify run-on list)
 
(14 intermediate revisions by 6 users not shown)
Line 2: Line 2:
 
{{cpp/keyword/navbar}}
 
{{cpp/keyword/navbar}}
  
This is a list of reserved keywords in C++. Since they are used by the language, these keywords are not available for re-definition or overloading. {{rev inl|since=c++11|As an exception, they are not considered reserved in [[cpp/language/attributes|''attribute-token'']]s.}}
+
This is a list of reserved keywords in C++. Since they are used by the language, these keywords are not available for re-definition or overloading.{{rev inl|since=c++11| As an exception, they are not considered reserved in {{lt|cpp/language/attributes}} (excluding attribute argument lists).}}
  
 
{|class="wikitable"
 
{|class="wikitable"
 
|-
 
|-
! A – C !! D – P !! R – Z
+
!A – C!!D – P!!R – Z
|- style="vertical-align:top;"
+
|-style="vertical-align:top;"
 
|
 
|
 
{{rlt|alignas}} {{mark c++11}}<br>
 
{{rlt|alignas}} {{mark c++11}}<br>
Line 14: Line 14:
 
{{rlt|and_eq}}<br>
 
{{rlt|and_eq}}<br>
 
{{rlt|asm}}<br>
 
{{rlt|asm}}<br>
{{ltt|cpp/language/transactional memory|atomic_cancel}} {{mark since tm ts}}<br>
+
{{rlt|atomic_cancel}} {{mark since tm ts}}<br>
{{ltt|cpp/language/transactional memory|atomic_commit}} {{mark since tm ts}}<br>
+
{{rlt|atomic_commit}} {{mark since tm ts}}<br>
{{ltt|cpp/language/transactional memory|atomic_noexcept}} {{mark since tm ts}}<br>
+
{{rlt|atomic_noexcept}} {{mark since tm ts}}<br>
{{rlt|auto}} {{mark|1}} {{mark|2}} {{mark|3}} {{mark|4}}<br>
+
{{rlt|auto}} {{mark|1}} {{mark|3}} {{mark|4}} {{mark|5}}<br>
 
{{rlt|bitand}}<br>
 
{{rlt|bitand}}<br>
 
{{rlt|bitor}}<br>
 
{{rlt|bitor}}<br>
Line 32: Line 32:
 
{{rlt|concept}} {{mark c++20}}<br>
 
{{rlt|concept}} {{mark c++20}}<br>
 
{{rlt|const}}<br>
 
{{rlt|const}}<br>
{{rlt|consteval}} {{mark c++20}}<br>
+
{{rlt|consteval}} {{mark c++20}} {{mark|5}}<br>
{{rlt|constexpr}} {{mark c++11}}<br>
+
{{rlt|constexpr}} {{mark c++11}} {{mark|3}}<br>
 
{{rlt|constinit}} {{mark c++20}}<br>
 
{{rlt|constinit}} {{mark c++20}}<br>
 
{{rlt|const_cast}}<br>
 
{{rlt|const_cast}}<br>
Line 41: Line 41:
 
{{rlt|co_yield}} {{mark c++20}}<br>
 
{{rlt|co_yield}} {{mark c++20}}<br>
 
|
 
|
{{rlt|decltype}} {{mark c++11}}<br>
+
{{rlt|decltype}} {{mark c++11}} {{mark|2}}<br>
 
{{rlt|default}} {{mark|1}}<br>
 
{{rlt|default}} {{mark|1}}<br>
 
{{rlt|delete}} {{mark|1}}<br>
 
{{rlt|delete}} {{mark|1}}<br>
Line 50: Line 50:
 
{{rlt|enum}} {{mark|1}}<br>
 
{{rlt|enum}} {{mark|1}}<br>
 
{{rlt|explicit}}<br>
 
{{rlt|explicit}}<br>
{{rlt|export}} {{mark|1}} {{mark|3}}<br>  
+
{{rlt|export}} {{mark|1}} {{mark|4}}<br>  
 
{{rlt|extern}} {{mark|1}}<br>
 
{{rlt|extern}} {{mark|1}}<br>
 
{{rlt|false}}<br>
 
{{rlt|false}}<br>
Line 57: Line 57:
 
{{rlt|friend}}<br>
 
{{rlt|friend}}<br>
 
{{rlt|goto}}<br>
 
{{rlt|goto}}<br>
{{rlt|if}} {{mark|2}} {{mark|4}}<br>
+
{{rlt|if}} {{mark|3}} {{mark|5}}<br>
{{rlt|inline}} {{mark|1}}<br>
+
{{rlt|inline}} {{mark|1}} {{mark|3}}<br>
{{rlt|int}}<br>
+
{{rlt|int}} {{mark|1}}<br>
 
{{rlt|long}}<br>
 
{{rlt|long}}<br>
 
{{rlt|mutable}} {{mark|1}}<br>
 
{{rlt|mutable}} {{mark|1}}<br>
Line 68: Line 68:
 
{{rlt|not_eq}}<br>
 
{{rlt|not_eq}}<br>
 
{{rlt|nullptr}} {{mark c++11}}<br>
 
{{rlt|nullptr}} {{mark c++11}}<br>
{{rlt|operator}} {{mark|4}}<br>
+
{{rlt|operator}} {{mark|1}}<br>
 
{{rlt|or}}<br>
 
{{rlt|or}}<br>
 
{{rlt|or_eq}}<br>
 
{{rlt|or_eq}}<br>
{{rlt|private}} {{mark|3}}<br>
+
{{rlt|private}} {{mark|4}}<br>
 
{{rlt|protected}}<br>
 
{{rlt|protected}}<br>
 
{{rlt|public}}<br>
 
{{rlt|public}}<br>
 
|
 
|
 
{{rlt|reflexpr}} {{mark since reflection ts}}<br>
 
{{rlt|reflexpr}} {{mark since reflection ts}}<br>
{{rlt|register}} {{mark|2}}<br>
+
{{rlt|register}} {{mark|3}}<br>
 
{{rlt|reinterpret_cast}}<br>
 
{{rlt|reinterpret_cast}}<br>
 
{{rlt|requires}} {{mark c++20}}<br>
 
{{rlt|requires}} {{mark c++20}}<br>
Line 88: Line 88:
 
{{rlt|struct}} {{mark|1}}<br>
 
{{rlt|struct}} {{mark|1}}<br>
 
{{rlt|switch}}<br>
 
{{rlt|switch}}<br>
{{ltt|cpp/language/transactional memory|synchronized}} {{mark since tm ts}}<br>
+
{{rlt|synchronized}} {{mark since tm ts}}<br>
 
{{rlt|template}}<br>
 
{{rlt|template}}<br>
{{rlt|this}} {{mark|4}}<br>
+
{{rlt|this}} {{mark|5}}<br>
 
{{rlt|thread_local}} {{mark c++11}}<br>
 
{{rlt|thread_local}} {{mark c++11}}<br>
{{rlt|throw}}<br>
+
{{rlt|throw}} {{mark|3}} {{mark|4}}<br>
 
{{rlt|true}}<br>
 
{{rlt|true}}<br>
 
{{rlt|try}}<br>
 
{{rlt|try}}<br>
 
{{rlt|typedef}}<br>
 
{{rlt|typedef}}<br>
 
{{rlt|typeid}}<br>
 
{{rlt|typeid}}<br>
{{rlt|typename}}<br>
+
{{rlt|typename}} {{mark|3}} {{mark|4}}<br>
 
{{rlt|union}}<br>
 
{{rlt|union}}<br>
 
{{rlt|unsigned}}<br>
 
{{rlt|unsigned}}<br>
{{rlt|using}} {{mark|1}}<br>
+
{{rlt|using}} {{mark|1}} {{mark|4}}<br>
 
{{rlt|virtual}}<br>
 
{{rlt|virtual}}<br>
 
{{rlt|void}}<br>
 
{{rlt|void}}<br>
Line 111: Line 111:
  
 
* {{mark|1}} — meaning changed or new meaning added in C++11.
 
* {{mark|1}} — meaning changed or new meaning added in C++11.
* {{mark|2}} — meaning changed or new meaning added in C++17.
+
* {{mark|2}} — new meaning added in C++14.
* {{mark|3}} — meaning changed or new meaning added in C++20.
+
* {{mark|3}} — meaning changed or new meaning added in C++17.
* {{mark|4}} — new meaning added in C++23.
+
* {{mark|4}} — meaning changed or new meaning added in C++20.
Note that {{rlt|and}}, {{rlt|bitor}}, {{rlt|or}}, {{rlt|xor}}, {{rlt|compl}}, {{rlt|bitand}}, {{rlt|and_eq}}, {{rlt|or_eq}}, {{rlt|xor_eq}}, {{rlt|not}}, and {{rlt|not_eq}} (along with the digraphs {{c|<%}}, {{c|%>}}, {{c|<:}}, {{c|:>}}, {{c|%:}}, and {{c|%:%:}}) provide an [[cpp/language/operator alternative|alternative way to represent standard tokens]]. {{rev inl|since=c++11|These keywords are also considered reserved in {{spar|attribute-token}}s, but some implementations handle them the same as the others.}}
+
* {{mark|5}} — new meaning added in C++23.
 +
Note that: {{rlt|and}}, {{rlt|bitor}}, {{rlt|or}}, {{rlt|xor}}, {{rlt|compl}}, {{rlt|bitand}}, {{rlt|and_eq}}, {{rlt|or_eq}}, {{rlt|xor_eq}}, {{rlt|not}} and {{rlt|not_eq}} (along with digraphs: {{c|<%}}, {{c|%>}}, {{c|<:}}, {{c|:>}}, {{c|%:}}, {{c|%:%:}}{{rev inl|until=c++17|removed=yes| and trigraphs: {{c|??<}}, {{c|??>}}, {{c|??(}}, {{c|??)}}, {{c|1=??=}}, {{c|??/}}, {{c|??'}}, {{c|??!}}, {{c|??-}}}}) provide an [[cpp/language/operator alternative|alternative way to represent standard tokens]].{{rev inl|since=c++11| These keywords are also considered reserved in attributes (excluding attribute argument lists), but some implementations handle them the same as the others.}}
  
 
In addition to keywords, there are ''identifiers with special meaning'', which may be used as names of objects or functions, but have special meaning in certain contexts.
 
In addition to keywords, there are ''identifiers with special meaning'', which may be used as names of objects or functions, but have special meaning in certain contexts.
Line 121: Line 122:
 
|-
 
|-
 
|
 
|
{{ltt|cpp/language/final}} {{mark c++11}}<br>
+
[[cpp/identifier_with_special_meaning/final|{{tt|final}}]] {{mark c++11}}<br>
{{ltt|cpp/language/override}} {{mark c++11}}<br>
+
[[cpp/identifier_with_special_meaning/override|{{tt|override}}]] {{mark c++11}}<br>
{{ltt|cpp/language/transactional memory|transaction_safe}} {{mark since tm ts}}<br>
+
{{rlt|transaction_safe}} {{mark since tm ts}}<br>
{{ltt|cpp/language/transactional memory|transaction_safe_dynamic}} {{mark since tm ts}}<br>
+
{{rlt|transaction_safe_dynamic}} {{mark since tm ts}}<br>
{{rlt|import}} {{mark c++20}}<br>
+
[[cpp/identifier_with_special_meaning/import|{{tt|import}}]] {{mark c++20}}<br>
{{rlt|module}} {{mark c++20}}
+
[[cpp/identifier_with_special_meaning/module|{{tt|module}}]] {{mark c++20}}
 
|}
 
|}
  
Also, all {{lt|cpp/language/identifiers}} that contain a double underscore {{tt|__}} in any position and each identifier that begins with an underscore followed by an uppercase letter is always reserved and all identifiers that begin with an underscore are reserved for use as names in the global namespace. See {{lt|cpp/language/identifiers}} for more details.
+
Also, all {{lt|cpp/language/identifiers}} that contain a double underscore {{tt|__}} in any position and each identifier that begins with an underscore followed by an uppercase letter is always reserved, and all identifiers that begin with an underscore are reserved for use as names in the global namespace. See {{lt|cpp/language/identifiers}} for more details.
  
 
The namespace {{tt|std}} is used to place names of the standard C++ library. See [[cpp/language/extending std|Extending namespace std]] for the rules about adding names to it.
 
The namespace {{tt|std}} is used to place names of the standard C++ library. See [[cpp/language/extending std|Extending namespace std]] for the rules about adding names to it.
Line 163: Line 164:
 
|
 
|
 
{{rlt|export}} {{mark c++20}}<br>
 
{{rlt|export}} {{mark c++20}}<br>
{{rlt|import}} {{mark c++20}}<br>
+
[[cpp/identifier_with_special_meaning/import|{{tt|import}}]] {{mark c++20}}<br>
{{rlt|module}} {{mark c++20}}
+
[[cpp/identifier_with_special_meaning/module|{{tt|module}}]] {{mark c++20}}
 
|}
 
|}
  

Latest revision as of 20:45, 7 November 2024

 
 
C++ language
General topics
Keywords
Escape sequences
Flow control
Conditional execution statements
if
Iteration statements (loops)
for
range-for (C++11)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications (until C++17*)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
explicit (C++11)
static

Special member functions
Templates
Miscellaneous
 
 

This is a list of reserved keywords in C++. Since they are used by the language, these keywords are not available for re-definition or overloading. As an exception, they are not considered reserved in attributes (excluding attribute argument lists).(since C++11)

A – C D – P R – Z

alignas (C++11)
alignof (C++11)
and
and_eq
asm
atomic_cancel (TM TS)
atomic_commit (TM TS)
atomic_noexcept (TM TS)
auto (1) (3) (4) (5)
bitand
bitor
bool
break
case
catch
char
char8_t (C++20)
char16_t (C++11)
char32_t (C++11)
class (1)
compl
concept (C++20)
const
consteval (C++20) (5)
constexpr (C++11) (3)
constinit (C++20)
const_cast
continue
co_await (C++20)
co_return (C++20)
co_yield (C++20)

decltype (C++11) (2)
default (1)
delete (1)
do
double
dynamic_cast
else
enum (1)
explicit
export (1) (4)
extern (1)
false
float
for (1)
friend
goto
if (3) (5)
inline (1) (3)
int (1)
long
mutable (1)
namespace
new
noexcept (C++11)
not
not_eq
nullptr (C++11)
operator (1)
or
or_eq
private (4)
protected
public

reflexpr (reflection TS)
register (3)
reinterpret_cast
requires (C++20)
return
short
signed
sizeof (1)
static
static_assert (C++11)
static_cast
struct (1)
switch
synchronized (TM TS)
template
this (5)
thread_local (C++11)
throw (3) (4)
true
try
typedef
typeid
typename (3) (4)
union
unsigned
using (1) (4)
virtual
void
volatile
wchar_t
while
xor
xor_eq

  • (1) — meaning changed or new meaning added in C++11.
  • (2) — new meaning added in C++14.
  • (3) — meaning changed or new meaning added in C++17.
  • (4) — meaning changed or new meaning added in C++20.
  • (5) — new meaning added in C++23.

Note that: and, bitor, or, xor, compl, bitand, and_eq, or_eq, xor_eq, not and not_eq (along with digraphs: <%, %>, <:, :>, %:, %:%: and trigraphs: ??<, ??>, ??(, ??), ??=, ??/, ??', ??!, ??-(until C++17)) provide an alternative way to represent standard tokens. These keywords are also considered reserved in attributes (excluding attribute argument lists), but some implementations handle them the same as the others.(since C++11)

In addition to keywords, there are identifiers with special meaning, which may be used as names of objects or functions, but have special meaning in certain contexts.

final (C++11)
override (C++11)
transaction_safe (TM TS)
transaction_safe_dynamic (TM TS)
import (C++20)
module (C++20)

Also, all identifiers that contain a double underscore __ in any position and each identifier that begins with an underscore followed by an uppercase letter is always reserved, and all identifiers that begin with an underscore are reserved for use as names in the global namespace. See identifiers for more details.

The namespace std is used to place names of the standard C++ library. See Extending namespace std for the rules about adding names to it.

The name posix is reserved for a future top-level namespace. The behavior is undefined if a program declares or defines anything in that namespace.

(since C++11)

The following tokens are recognized by the preprocessor when in context of a preprocessor directive:

if
elif
else
endif

ifdef
ifndef
elifdef (C++23)
elifndef (C++23)

define
undef
include
line

error
warning (C++23)
pragma

defined
__has_include (C++17)
__has_cpp_attribute (C++20)

export (C++20)
import (C++20)
module (C++20)

The following tokens are recognized by the preprocessor outside the context of a preprocessor directive:

_Pragma (C++11)

[edit] See also

C documentation for C keywords