c++ 之保留字

读者的话

一般情况下,C++关键字也被称为C++保留字,但严格情况下应分为:关键字、替代标记、库保留名称。

总的来说,为了避免出现问题,就按照常规方法,不要打这些擦边球就行了。

一、C++ 关键字

关键字是组成编程语言词汇表的标识符,它们不能用于其他用途。

下表列出了C++的关键字,其中粗体也是ANSI C99标准中的关键字。

alignas alignof asm auto bool
break case catch char char16_t
char32_t class const const_cast constexpr
continue decltype default delete do
double dynamic_cast else enum explicit
export extern false float for
friend goto if inline int
long mutable namespace new npexcept
nullptr operator private protected public
register reinterpret_cast return short signed
sizeof static static_assert static_cast struct
switch template this thread_local throw
true try typedef typeid typename
union unsigned using virtual void
volatile wchar_t while

二、代替标记

C++还有一些运算符的字母代替表示,它们被称为代替标记,代替标记也被保留。

标记 含义
and &&
and_eq &=
bitand &
or ||
or_eq |=
bitor |
not !
not_eq !=
xor ^
xor_eq ^=
compl ~

三、C++库保留名称

编译器禁止使用保留给C++库使用的名称,如果您使用他们,后果将是不确定的。

如果程序包含某个头文件,则不应将该头文件中定义的宏名用作其他目的。

比如  中的 CHAR_BIT

C++语言保留了以两个下划线或下划线和大写字母打头的名称,还将以单个下划线打头的名称保留用作全局变量。

比如 __gink _Lynx __lynx

C++语言保留了在库文件中被声明为链接性为外部的名称。

比如  中的 tan 函数,其原型为: double tan(double);
则用户不能定义:int tan(double);

四、有特殊含义的标识符

C++社区讨厌新增关键字,因为它们可能与现有代码发生冲突。

C++11提供了另一种避免新增关键字的机制,即使用特殊含义的标识符。

这些标识符不是关键字,但可以用于语言实现。

编译器根据上下文来判断他们是常规标识符还是用于实现语言功能。

int final;                                  // 常规标识符
virtual void unfold(){...} = final;         // 实现语言功能

另外,C++还有很多经常出现在程序中,但不被保留的标识符。

头文件名 库函数名 main

只要不发生名称空间冲突,就可将这些标识符用于其他目的,但是常识告诉您不必且不应这样做!

你可能感兴趣的:(基本算法知识,c++,关键字)