初级光能
ture false int long double float void using nmaespace default case return for if else do while char switch break continue
生僻:goto new mutable export friend struct protected private auto volatile template signed operator this throw sizeof
virtual register public enum catch class union typename static inline short try delete explicit
修练者
C++有四种类型转换关键字,分别是:
(1) . static_cast (2) const_cast (3) reinterpret_cast (4) dynamic_cast
时梓繁在2018-08-25 14:44:49追加了内容
这四种类型转换关键字分别使用在不同的情况下。下文对这四个关键字进行比较分析:
(1).static_cast : 可以实现C++中内置基本数据类型之间的转换,如果涉及到类的话,static_cast只能在相互联系的类型中进行相互转换,不一定包含虚函数。
(2).const_cast : 不能在不同种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。
(3).reinterpret_cast: 有着和c风格的强制转换同样的能力。它可以转化任何内置的数据类型为其他任何的数据类型,也可以转换任何指针类型为其他的类型。它甚至可以转化内置的数据类型为指针,无需考虑类型安全或者常量的情形。不到万不得已,不要轻易使用。
(4).dynamic_cast :
<1> : 其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。
<2> :不能用于内置的基本数据类型的强制转换。
<3> : dynamic_cast转换如果成功的话,返回的是指向类的指针或者引用,转换失败的话则返回NULL。
<4> : 使用dynamic_cast进行转换时,基类中一定要有虚函数,否则编译不通过。
高级守护
asm
do
if
return
typedef
auto
double
inline
short
typeid
bool
dynamic_cast
int
signed
typename
break
else
long
sizeof
union
case
enum
mutable
static
unsigned
catch
explicit
namespace
static_cast
using
char
export
new
struct
virtual
class
extern
operator
switch
void
const
false
private
template
volatile
const_cast
float
protected
this
wchar_t
continue
for
public
throw
while
default
friend
register
true
delete
goto
reinterpret_cast
try
alignas、alignof、char16_t、char32_t、constexpr、decltype、noexcept、nullptr、static_assert、thread_local
const_cast、dynamic_cast、reinterpret_cast、static_cast。
asm
用于语法:
asm-definition:
asm ( string-literal ) ;
意义由实现定义,典型实现中传输其中的字符串给汇编器。
折叠auto
在C++98/03中这个这个关键字用于声明块中的变量的生存期为自动生存期,若是对象同时具有自动存储类,即生存期在块结束时结束。这样的变量被称为局部变量。这个关键字不常用,因为即便省略,声明的默认就是auto的。
在C++11中,auto的含义改变为自动通过初值符推断声明的类型占位符。如声明auto i = 1;,auto就相当于int,因为1是int类型,可以推断出i的类型。也可以使用auto& i等声明,具体推导规则同模版参数类型推导。
折叠*_cast
即const_cast、dynamic_cast、reinterpret_cast、static_cast。
C++风格的类型转换。dynamic_cast是动态的,需要运行时支持;其它都是静态检查,相比C风格的类型转换更加细化,增强了类型安全性。
折叠bool,true,false
bool即布尔类型,属于基本类型中的整数类型,取值为真和假。true和false是具有bool类型的字面量,是右值,分别表示真和假。
折叠break,continue,goto
break用于跳出for或while循环或switch。continue用于跳转到循环起始。goto用于无条件跳转到函数内的标号。结构化程序较少使用goto,更多使用循环代替。
折叠case,default,switch
switch分支语句的起始,根据switch条件跳转到case标号或defalut标记的分支上。
折叠catch,throw,try
用于异常处理。try指定try块的起始,try块后的catch可以捕获异常。异常由throw抛出。throw在函数中还表示动态异常规范,但在C++11中被标记为过时(由noexcept部分取代)。
折叠char,wchar_t
表示字符型和宽字符型这些整数类型(属于基本类型),但一般只专用于表示字符。char(和signed char、unsigned char一起)事实上定义了字节的大小。
折叠const,volatile
const和volatile是类型修饰符,语法类似,在C++中合称为cv-限定符(cv-qualifier)。可以共同使用。用于变量或函数参数声明,也可以限制非静态成员函数。const表示只读类型(指定类型安全性,保护对象不被意外修改),volatile指定被修饰的对象类型的读操作是副作用(因此读取不能被随便优化合并,适合映射I/O寄存器等)。
折叠struct,class,union
用于类型声明。class是一般的类类型。struct在C++中是特殊的类类型,声明中仅默认隐式的成员和基类访问限定与class不同(struct是public,class是private)。union是联合体类型。满足特定条件类类型--POD struct或POD union可以和C语言中的struct和union对应兼容。
class还有个用途是在模版类型声明中作为表示模版类型参数或模版模版参数的语法的必要组成部分。前者也可被typename代替。
折叠delete,new
delete单独使用,表示释放具有动态存储期对象,默认版本调用全局的去配器(deallocator)::operator delete和析构函数。new单独使用,表示请求分配动态存储期对象,默认版本调用全局的分配器(allocator)::operator new和指定的析构函数。和operator连用表示分别表示去配器(operator delete)和分配器(operator new),用于释放分配器(allocator)的内存和分配内存。operator delete也在分配内存被异常中断时被调用。
折叠do,for,while
循环语句的组成部分。C++支持do-while循环、for循环和while循环。C++11新增了ranged-based for循环,用:分隔声明的对象和指定循环的范围。
折叠数值类型
即double、float、long、int、short、signed、unsigned。
signed和unsigned作为前缀修饰整数类型,分别表示有符号和无符号。signed和unsigned修饰char类型,构成unsigned char和signed char,和char都不是相同的类型;不可修饰wchar_t、char16_t和char32_t。其它整数类型的signed省略或不省略,含义不变。signed或unsigned可单独作为类型,相当于signed int和unsigned int。
double和float专用于浮点数,double表示双精度,精度不小于float表示的浮点数。long double则是C++11指定的精度不小于double的浮点数。
其它关键字表示整数类型。从占用空间大小(sizeof)来看,保证char<=short<=int<=long<=long long。注意这些都不是相同的类型,即便大小和范围都一致;各自具有unsigned版本。其中long long是C++11指定的不小于long的整数。
折叠if,else
条件语句的组成部分。if表示条件,之后else表示否定分支。
折叠enum
构成枚举类型名的关键字。C++11新增带作用域的枚举,用enum class或enum struct(两者等价)声明。
折叠explicit
这个关键字修饰构造函数声明,表示显式构造函数(模版),显式构造函数不参与特定的重载。
C++11从两个角度扩展了用法。其一是适用于转换函数(模版),类似构造函数,避免不需要的重载。其二是列表初始化,除非直接使用std::initializer_list,显式构造函数被列表初始化忽略(在C++98/03中,explicit仅对单一参数调用构造函数有意义,这里打破了这个限制)。
折叠export
导出模版,用于分离编译。当初标准委员会未经充分实践支持匆忙通过了这一决定,被EDG证明具备不现实的可用性(即便EDG唯一地实现了这一个特性,他们也表示反对) 。MSVC、GCC、Clang等其它主流编译器前端都没有实现这一特性,甚至这是唯一明显约定不符合C++98/03的特性。C++11废除了这个export关键字的含义,但保留这个关键字,供以后使用 。
折叠extern
extern意为"外来的",是存储类声明修饰符。这个关键字在C语言中即很不明确,容易被混淆(尤其是extern inline--好在C++没有这种用法)。extern表示被修饰的声明中,名称的链接保持和之前的一致(若已有相同声明存在),或保持默认值(若之前没有相同名称的声明存在)--取决于声明的位置。在命名空间作用域(注意包括全局命名空间),extern表示外部链接;若这里省略extern,则对于const对象,默认具有内部链接;否则表示具有和命名空间一致的链接(若顶层没有嵌套未命名的命名空间,就是外部链接,否则是内部链接)。
C++11新增extern用于模版显式实例化声明,表示不在当前翻译单元实例化模版,而在别处有定义。这可以提升编译效率。
折叠friend
声明友元,使其不受访问权限控制的限制。
折叠inline
声明定义内联函数(模版),提示编译时内联--将所调用的代码嵌入到主调函数中。注意是否内联取决于实现--编译器有权不实际内联,如果它认为这是必要的或更符合预期的目标代码质量。但inline还改变了ODR(One Definition Rule)的适用性。类似函数模版,在头文件直接定义inline函数不会视为重复定义违反ODR而编译出错。C++中,一个函数若声明inline,则每处声明都必须保证是inline,和C语言允许extern inline或static inline不同--尽管C++实现可以提供类似非标准的扩展。注意类成员函数若在类定义内给出定义则隐含inline。
C++11中,新增inline namespace,指示命名空间中的名称同时是外层命名空间直接包含的名称。这便于命名空间的版本管理,减少冲突。
折叠mutable
用于类的非静态非const数据成员,表示不受到成员函数的const的限制,可以在const成员函数中使用。
折叠namespace
表示命名空间--其中可以声明若干标识符,组成的名称与其它命名空间不冲突。
可以声明一个命名空间或命名空间别名。
折叠operator
和操作符连用,指定一个重载了的操作符函数,也包括operator new和operator delete。
折叠private,protected,public
指定类成员或基类中的名称的访问权限控制,分别表示仅供本类使用、供本类和派生类使用、不设限制。
折叠register
提示声明的对象被放入寄存器中以便得到更好的性能。同inline类似,并非强制;不同的是这个提示经常被现代的编译器无视,因此C++11中被标记为过时的。
折叠return
子程序返回语句,终止当前函数执行,使控制流返回到主调函数的调用后。若返回类型不是void可以同时带返回值。
折叠static
和C语言类似,声明静态存储期对象,或指定一个函数的名称具有内部链接。在C++还有另一个用途--用于类作用域声明,表示声明的成员是类共有的,不需要通过类的对象访问。类的静态数据成员也具有静态存储期,除非被thread_local修饰。
折叠sizeof
返回类型名或表达式具有的类型对应的大小。不能对函数使用(虽然可能有非标准扩展)。C++11新增支持直接对类的数据成员作为操作数(之前无法使用)。sizeof的操作数是不被求值的,利用这一点可以配合模版元编程测试类型正确性。
折叠template
声明一个模板、模版的特化或显式实例化(另见extern)。模版用于打破类型系统的某些限制,推迟类型检查到实例化得到具体的模版实例进行以复用代码,实现泛型和参数化编程。
折叠this
this是一种实体,仅在类的非静态成员中使用,是指向类的对象的指针右值。
折叠typedef
用以给数据类型取别名。字面名义上是定义,实际只是声明--这点和C语言的说法不同。
C++11中可被using新增的用法代替。
折叠virtual
声明虚基类或虚函数。具有虚基类或虚函数的类是多态类(polymorphic class),需要运行时提供支持来判断成员函数调用分派到的具体类型。
折叠typeid
获取表达式的类型,以std::type_info表示结果,可能抛出std::bad_typeid。当操作数非多态类(引用)类型在编译时即可确定结果,否则需要在运行时取得结果,即RTTI。
折叠typename
告诉编译器一个嵌套的限定名(包含::)中的未知的标识符是一个类型。这只在模板中需要区分依赖名称时使用。
另一种用法是在模版声明参数列表中表示模版类型参数,可被class代替。
折叠using
有两种基本用法:using声明和using指示(using namespace ...)。
前者是声明,引入命名空间或基类作用域内已经被声明的名称。后者引入命名空间内所有的名称。
C++11新增了一类用法,可以代替typename,同时可以配合template使用(typedef基于语法考虑未被允许加入这种用法)。
折叠void
特殊的"空"类型,指定函数无返回值或无参数(在参数列表中只能够唯一地使用),用于表达式转换为void类型以丢弃计算值的必要(C++11加入了discarded-value-expression显式地指出了这一点),或用于void*指针类型。
折叠try
try,C++中用于异常处理的组合。
折叠alignas
alignof用于获取取指定表达式指定的(类似sizeof,可以直接是类型名)的对齐(alignment)。alignas用于声明时指定对齐类似于现有的类型。和sizeof类似,两者的操作数都不被求值。
折叠constexpr
类似const但更强大,修饰函数或对象,表示函数结果或对象是编译时决定的常量,以便优化。(const不能修饰一般的函数,也不一定指定声明的对象能编译期的常量表达式,更可能只是只读对象。而在C语言中,const完全只能指定只读对象。)
折叠char16_t和char32_t
二者分别表示16位字符型和32位字符型,类似char和wchar_t,也是一般只专用于表示字符的整数类型,且设计上用于表示Unicode字符。char16_t和char32_t是C++11新增的,以克服wchar_t在不同平台上无法保证确定宽度的缺点。
折叠decltype
用于编译时推断类型。此外参与函数声明的另一种语法:指定返回auto,同时decltype引导trailing-return-type指定实际应该返回类型。decltype的操作数也不被求值。
折叠nullptr
字面量nullptr是具有std::nullptr_t类型的右值,是空指针常量。C++98/03中表示空指针常量的NULL或0都会在重载中引起混淆,而纯库的解决方案在这里也遇到困难,所以有必要加入新的关键字来专门表示空指针。
折叠noexcept
实践表明动态异常规范会影响运行时性能。新增的noexcept表示静态异常规范,只指定函数(模版)是否有异常抛出,这里noexcept即noexcept(true),表示没有异常抛出。除了异常规范,noexcept可以作用于一个表达式来判断是否有异常,这对于模版代码非常有用。
折叠static_assert
用于编译时的静态断言:若指定的表达式为false则编译失败。
折叠auto
C++11标准和C++98/03标准的auto是不同的。C++98/03标准中,auto表示自动储存类型 ;C++11标准中,auto表示由编译器静态判断其应有的类型 。
赵天乐在2018-08-25 15:27:57追加了内容
C++98/03:
asm
do
if
return
typedef
auto
double
inline
short
typeid
bool
dynamic_cast
int
signed
typename
break
else
long
sizeof
union
case
enum
mutable
static
unsigned
catch
explicit
namespace
static_cast
using
char
export
new
struct
virtual
class
extern
operator
switch
void
const
false
private
template
volatile
const_cast
float
protected
this
wchar_t
continue
for
public
throw
while
default
friend
register
true
delete
goto
reinterpret_cast
try
赵天乐在2018-08-25 15:28:41追加了内容
c11新增:
alignas、alignof、char16_t、char32_t、constexpr、decltype、noexcept、nullptr、static_assert、thread_local
初级光能
你说谁心虚呢?
export
导出模版,用于分离编译。当初标准委员会未经充分实践支持匆忙通过了这一决定,被EDG证明具备不现实的可用性(即便EDG唯一地实现了这一个特性,他们也表示反对) [7] 。MSVC、GCC、Clang等其它主流编译器前端都没有实现这一特性,甚至这是唯一明显约定不符合C++98/03的特性。C++11废除了这个export关键字的含义,但保留这个关键字,供以后使用 [3] 。
https://baike.baidu.com/item/C++关键字/5773813
勿举报,详情请见楼上评论
修练者
int for read while if double float char do void using namespace return long else 等等。
望采纳!
高级天翼
,你好啊
asm inline virtual auto goto or not bitand typename static this using namespace
continue export typeid bool const return sizeof register delete public new void
union compl template class and bitor and_eq not_eq or_eq compl mutable operator
const short xor xor_eq const_cast wchar_t typedef dynamic_cast enum struct case
//!@782
??1
//防伪标签
蒋智航在2018-08-26 21:00:50追加了内容
复ۖิ制ۖิۖิ这ۖิ几ۖิ个ۖิ字ۖิ看ۖิ你ۖิ多ۖิ久ۖิ能ۖิ删ۖิ完ۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิۖิ ิۖิۣ ۣۣۖۖۖۖิۖิิۣۣۖۖิ ۖิิۣۣۖۖิۣ ۣۣۖۖ(´・ω・`)
新手天翼
int bool char float double
if else
for do -while do break continue
傅文彬在2018-08-29 20:10:22追加了内容
using namespace
傅文彬在2018-08-29 20:10:50追加了内容
const
高级天翼
asm inline virtual auto goto or not bitand typename static this using namespace
continue export typeid bool const return sizeof register delete public new void
union compl template class and bitor and_eq not_eq or_eq compl mutable operator
const short xor xor_eq const_cast wchar_t typedef dynamic_cast enum struct case
采纳采纳
asm inline virtual auto goto or not bitand typename static this using namespace
continue export typeid bool const return sizeof register delete public new void
union compl template class and bitor and_eq not_eq or_eq compl mutable operator
const short xor xor_eq const_cast wchar_t typedef dynamic_cast enum struct case
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
新手守护
extern
operator
switch
void
const
false
private
template
volatile
const_cast
float
protected
this
wchar_t
continue
for
public
throw
while
default
friend
新手守护
extern
operator
switch
void
const
false
private
template
volatile
const_cast
float
protected
this
wchar_t
continue
for
public
throw
while
default
friend
新手光能
C++关键字
关键字(keyword)又称保留字,是整个语言范围内预先保留的标识符。每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing-token)中区别出来,剩下的标识符作为记号(token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。
中文名
C++关键字
外文名
C++ keywords
学 科
计算机科学
专 业
程序设计
目录
- 1 简介
- ▪ C++98/03 关键字
- ▪ 关键字的改变
- 2 C++11详解
- ▪ alignas
- ▪ constexpr
- ▪ char16_t 和 char32_t
- ▪ decltype
- ▪ nullptr
- ▪ noexcept
- ▪ static_assert
- ▪ auto
- 3 其它详解
- ▪ asm
- ▪ auto
- ▪ *_cast
- ▪ bool,true,false
- ▪ break,continue,goto
- ▪ case,default,switch
- ▪ catch,throw,try
- ▪ char,wchar_t
- ▪ const,volatile
- ▪ struct,class,union
- ▪ delete,new
- ▪ do,for,while
- ▪ 数值类型
- ▪ if,else
- ▪ enum
- ▪ explicit
- ▪ export
- ▪ extern
- ▪ friend
- ▪ inline
- ▪ mutable
- ▪ namespace
- ▪ operator
- ▪ private,protected,public
- ▪ register
- ▪ return
- ▪ static
- ▪ sizeof
- ▪ template
- ▪ this
- ▪ typedef
- ▪ virtual
- ▪ typeid
- ▪ typename
- ▪ using
- ▪ void
- ▪ try
简介
各个版本的ISO C++都规定以下划线接大写字母或下划线起始的标识符保留给实现,编译器可以用这些保留标识符作为扩展关键字,这不保证可移植性。
C++98/03 关键字
ISO C++98/03关键字共63个,此处严格按标准原文排版:
asm
do
if
return
typedef
auto
double
inline
short
typeid
bool
dynamic_cast
int
signed
typename
break
else
long
sizeof
union
case
enum
mutable
static
unsigned
catch
explicit
namespace
static_cast
using
char
export
new
struct
virtual
class
extern
operator
switch
void
const
false
private
template
volatile
const_cast
float
protected
this
wchar_t
continue
for
public
throw
while
default
friend
register
true
delete
goto
reinterpret_cast
try
[1-2]
关键字的改变
C++11 关键字共73个。
新增关键字:alignas、alignof、char16_t、char32_t、constexpr、decltype、noexcept、nullptr、static_assert、thread_local。 [3]
auto 的意义改变。 [4]
register 被视为过时的(可能在未来标准移除)。 [5]
export 因为实现支持太少(仅Edison Design Group的前端支持),编译效率低下,取消原有意义(仍是关键字,但使用它的程序是错误的),改为保留给未来标准使用。 [3]
C++11详解
alignas
alignof用于获取取指定表达式指定的(类似sizeof,可以直接是类型名)的对齐(alignment)。alignas用于声明时指定对齐类似于现有的类型。和sizeof类似,两者的操作数都不被求值。
constexpr
类似const但更强大,修饰函数或对象,表示函数结果或对象是编译时决定的常量,以便优化。(const不能修饰一般的函数,也不一定指定声明的对象能编译期的常量表达式,更可能只是只读对象。而在C语言中,const完全只能指定只读对象。)
char16_t 和 char32_t
二者分别表示16位字符型和32位字符型,类似char和wchar_t,也是一般只专用于表示字符的整数类型,且设计上用于表示Unicode字符。char16_t和char32_t是C++11新增的,以克服wchar_t在不同平台上无法保证确定宽度的缺点。
decltype
用于编译时推断类型。此外参与函数声明的另一种语法:指定返回auto,同时decltype引导trailing-return-type指定实际应该返回类型。decltype的操作数也不被求值。
nullptr
字面量nullptr是具有std::nullptr_t类型的右值,是空指针常量。C++98/03中表示空指针常量的NULL或0都会在重载中引起混淆,而纯库的解决方案在这里也遇到困难,所以有必要加入新的关键字来专门表示空指针。
noexcept
实践表明动态异常规范会影响运行时性能。新增的noexcept表示静态异常规范,只指定函数(模版)是否有异常抛出,这里noexcept即noexcept(true),表示没有异常抛出。除了异常规范,noexcept可以作用于一个表达式来判断是否有异常,这对于模版代码非常有用。
static_assert
用于编译时的静态断言:若指定的表达式为false则编译失败。
auto
C++11标准和C++98/03标准的auto是不同的。C++98/03标准中,auto表示自动储存类型 [6] ;C++11标准中,auto表示由编译器静态判断其应有的类型 [4] 。
其它详解
asm
用于语法:
asm-definition:
asm ( string-literal ) ;
意义由实现定义,典型实现中传输其中的字符串给汇编器。
auto
在C++98/03中这个这个关键字用于声明块中的变量的生存期为自动生存期,若是对象同时具有自动存储类,即生存期在块结束时结束。这样的变量被称为局部变量。这个关键字不常用,因为即便省略,声明的默认就是auto的。 [6]
在C++11中,auto的含义改变为自动通过初值符推断声明的类型占位符。如声明auto i = 1;,auto就相当于int,因为1是int类型,可以推断出i的类型。也可以使用auto& i等声明,具体推导规则同模版参数类型推导。 [4]
*_cast
即const_cast、dynamic_cast、reinterpret_cast、static_cast。
C++风格的类型转换。dynamic_cast是动态的,需要运行时支持;其它都是静态检查,相比C风格的类型转换更加细化,增强了类型安全性。
bool,true,false
bool即布尔类型,属于基本类型中的整数类型,取值为真和假。true和false是具有bool类型的字面量,是右值,分别表示真和假。
break,continue,goto
break用于跳出for或while循环或switch。continue用于跳转到循环起始。goto用于无条件跳转到函数内的标号。结构化程序较少使用goto,更多使用循环代替。
case,default,switch
switch分支语句的起始,根据switch条件跳转到case标号或defalut标记的分支上。
catch,throw,try
用于异常处理。try指定try块的起始,try块后的catch可以捕获异常。异常由throw抛出。throw在函数中还表示动态异常规范,但在C++11中被标记为过时(由noexcept部分取代)。
char,wchar_t
表示字符型和宽字符型这些整数类型(属于基本类型),但一般只专用于表示字符。char(和signed char、unsigned char一起)事实上定义了字节的大小。
const,volatile
const和volatile是类型修饰符,语法类似,在C++中合称为cv-限定符(cv-qualifier)。可以共同使用。用于变量或函数参数声明,也可以限制非静态成员函数。const表示只读类型(指定类型安全性,保护对象不被意外修改),volatile指定被修饰的对象类型的读操作是副作用(因此读取不能被随便优化合并,适合映射I/O寄存器等)。
struct,class,union
用于类型声明。class是一般的类类型。struct在C++中是特殊的类类型,声明中仅默认隐式的成员和基类访问限定与class不同(struct是public,class是private)。union是联合体类型。满足特定条件类类型——POD struct或POD union可以和C语言中的struct和union对应兼容。
class还有个用途是在模版类型声明中作为表示模版类型参数或模版模版参数的语法的必要组成部分。前者也可被typename代替。
delete,new
delete单独使用,表示释放具有动态存储期对象,默认版本调用全局的去配器(deallocator)::operator delete和析构函数。new单独使用,表示请求分配动态存储期对象,默认版本调用全局的分配器(allocator)::operator new和指定的析构函数。和operator连用表示分别表示去配器(operator delete)和分配器(operator new),用于释放分配器(allocator)的内存和分配内存。operator delete也在分配内存被异常中断时被调用。
do,for,while
循环语句的组成部分。C++支持do-while循环、for循环和while循环。C++11新增了ranged-based for循环,用:分隔声明的对象和指定循环的范围。
数值类型
即double、float、long、int、short、signed、unsigned。
signed和unsigned作为前缀修饰整数类型,分别表示有符号和无符号。signed和unsigned修饰char类型,构成unsigned char和signed char,和char都不是相同的类型;不可修饰wchar_t、char16_t和char32_t。其它整数类型的signed省略或不省略,含义不变。signed或unsigned可单独作为类型,相当于signed int和unsigned int。
double和float专用于浮点数,double表示双精度,精度不小于float表示的浮点数。long double则是C++11指定的精度不小于double的浮点数。
其它关键字表示整数类型。从占用空间大小(sizeof)来看,保证char<=short<=int<=long<=long long。注意这些都不是相同的类型,即便大小和范围都一致;各自具有unsigned版本。其中long long是C++11指定的不小于long的整数。
if,else
条件语句的组成部分。if表示条件,之后else表示否定分支。
enum
构成枚举类型名的关键字。C++11新增带作用域的枚举,用enum class或enum struct(两者等价)声明。
explicit
这个关键字修饰构造函数声明,表示显式构造函数(模版),显式构造函数不参与特定的重载。
C++11从两个角度扩展了用法。其一是适用于转换函数(模版),类似构造函数,避免不需要的重载。其二是列表初始化,除非直接使用std::initializer_list,显式构造函数被列表初始化忽略(在C++98/03中,explicit仅对单一参数调用构造函数有意义,这里打破了这个限制)。
export
导出模版,用于分离编译。当初标准委员会未经充分实践支持匆忙通过了这一决定,被EDG证明具备不现实的可用性(即便EDG唯一地实现了这一个特性,他们也表示反对) [7] 。MSVC、GCC、Clang等其它主流编译器前端都没有实现这一特性,甚至这是唯一明显约定不符合C++98/03的特性。C++11废除了这个export关键字的含义,但保留这个关键字,供以后使用 [3] 。
extern
extern意为“外来的”,是存储类声明修饰符。这个关键字在C语言中即很不明确,容易被混淆(尤其是extern inline——好在C++没有这种用法)。extern表示被修饰的声明中,名称的链接保持和之前的一致(若已有相同声明存在),或保持默认值(若之前没有相同名称的声明存在)——取决于声明的位置。在命名空间作用域(注意包括全局命名空间),extern表示外部链接;若这里省略extern,则对于const对象,默认具有内部链接;否则表示具有和命名空间一致的链接(若顶层没有嵌套未命名的命名空间,就是外部链接,否则是内部链接)。
C++11新增extern用于模版显式实例化声明,表示不在当前翻译单元实例化模版,而在别处有定义。这可以提升编译效率。
friend
声明友元,使其不受访问权限控制的限制。
inline
声明定义内联函数(模版),提示编译时内联——将所调用的代码嵌入到主调函数中。注意是否内联取决于实现——编译器有权不实际内联,如果它认为这是必要的或更符合预期的目标代码质量。但inline还改变了ODR(One Definition Rule)的适用性。类似函数模版,在头文件直接定义inline函数不会视为重复定义违反ODR而编译出错。C++中,一个函数若声明inline,则每处声明都必须保证是inline,和C语言允许extern inline或static inline不同——尽管C++实现可以提供类似非标准的扩展。注意类成员函数若在类定义内给出定义则隐含inline。
C++11中,新增inline namespace,指示命名空间中的名称同时是外层命名空间直接包含的名称。这便于命名空间的版本管理,减少冲突。
mutable
用于类的非静态非const数据成员,表示不受到成员函数的const的限制,可以在const成员函数中使用。
namespace
表示命名空间——其中可以声明若干标识符,组成的名称与其它命名空间不冲突。
可以声明一个命名空间或命名空间别名。
operator
和操作符连用,指定一个重载了的操作符函数,也包括operator new和operator delete。
private,protected,public
指定类成员或基类中的名称的访问权限控制,分别表示仅供本类使用、供本类和派生类使用、不设限制。
register
提示声明的对象被放入寄存器中以便得到更好的性能。同inline类似,并非强制;不同的是这个提示经常被现代的编译器无视,因此C++11中被标记为过时的。
return
子程序返回语句,终止当前函数执行,使控制流返回到主调函数的调用后。若返回类型不是void可以同时带返回值。
static
和C语言类似,声明静态存储期对象,或指定一个函数的名称具有内部链接。在C++还有另一个用途——用于类作用域声明,表示声明的成员是类共有的,不需要通过类的对象访问。类的静态数据成员也具有静态存储期,除非被thread_local修饰。
sizeof
返回类型名或表达式具有的类型对应的大小。不能对函数使用(虽然可能有非标准扩展)。C++11新增支持直接对类的数据成员作为操作数(之前无法使用)。sizeof的操作数是不被求值的,利用这一点可以配合模版元编程测试类型正确性。
template
声明一个模板、模版的特化或显式实例化(另见extern)。模版用于打破类型系统的某些限制,推迟类型检查到实例化得到具体的模版实例进行以复用代码,实现泛型和参数化编程。
this
this是一种实体,仅在类的非静态成员中使用,是指向类的对象的指针右值。
typedef
用以给数据类型取别名。字面名义上是定义,实际只是声明——这点和C语言的说法不同。
C++11中可被using新增的用法代替。
virtual
声明虚基类或虚函数。具有虚基类或虚函数的类是多态类(polymorphic class),需要运行时提供支持来判断成员函数调用分派到的具体类型。
typeid
获取表达式的类型,以std::type_info表示结果,可能抛出std::bad_typeid。当操作数非多态类(引用)类型在编译时即可确定结果,否则需要在运行时取得结果,即RTTI。
typename
告诉编译器一个嵌套的限定名(包含::)中的未知的标识符是一个类型。这只在模板中需要区分依赖名称时使用。
另一种用法是在模版声明参数列表中表示模版类型参数,可被class代替。
using
有两种基本用法:using声明和using指示(using namespace ...)。
前者是声明,引入命名空间或基类作用域内已经被声明的名称。后者引入命名空间内所有的名称。
C++11新增了一类用法,可以代替typename,同时可以配合template使用(typedef基于语法考虑未被允许加入这种用法)。
void
特殊的“空”类型,指定函数无返回值或无参数(在参数列表中只能够唯一地使用),用于表达式转换为void类型以丢弃计算值的必要(C++11加入了discarded-value-expression显式地指出了这一点),或用于void*指针类型。
try
try,C++中用于异常处理的组合。
宋梓涵在2018-08-25 15:11:32追加了内容
采纳的人是大帅哥!!!
中级光能
我吉岛,c++关键字:
auto bool break case catch
char class const const_cast continue
详细关键字请见书本:
青少年信息学奥林匹克竞赛培训教材c++培训教程第257页
初级启示者
大总结
存储结构:using,namespace,void,return,inline,const,auto,static,extern,register
顺序结构:int,double,long,float,short,unsigned,signed(以前的版本是的)
选择结构:if,else,switch,case,bool,true,false,default,and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq
循环结构:for,do,while,break,continue,goto
数组结构:char,sizeof
动态规划:new, delete
结构体系:struct,class,enum,union,typedef
指针结构:asm, export, typeid, volatile
家庭树系:this, friend, virtual, mutable, explicit, operator
异常内型:catch, throw, try
派生树系:private, protected, public
@郑怡翔
望采纳,谢谢,