华亭县建设局网站2017,免费企业网站cms系统,手机银行app下载安装,建筑网片厂2、C/C分别有多少个关键字#xff1f; 假如别人问某一个关键字是否属于C/C#xff0c;要能正确的答出来。
1#xff09;由ANSI标准定义的C语言关键字共32个 auto double int struct break else long switch case enum register typedef char extern return union const flo…2、C/C分别有多少个关键字 假如别人问某一个关键字是否属于C/C要能正确的答出来。
1由ANSI标准定义的C语言关键字共32个 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static 根据关键字的作用可以将关键字分为数据类型关键字和流程控制关键字两大类。**1 数据类型关键字****A.基本数据类型5个**void 声明函数无返回值或无参数声明无类型指针显式丢弃运算结果char 字符型类型数据属于整型数据的一种int 整型数据通常为编译器指定的机器字长float 单精度浮点型数据属于浮点数据的一种double 双精度浮点型数据属于浮点数据的一种**B .类型修饰关键字4个**short 修饰int短整型数据可省略被修饰的int。long 修饰int长整形数据可省略被修饰的int。signed 修饰整型数据有符号数据类型unsigned 修饰整型数据无符号数据类型**C .复杂类型关键字5个**struct 结构体声明union 共用体声明enum 枚举声明typedef 声明类型别名sizeof 得到特定类型或特定类型变量的大小**D .存储级别关键字6个**auto 指定为自动变量由编译器自动分配及释放。通常在栈上分配static 指定为静态变量分配在静态变量区修饰函数时指定函数作用域为文件内部register 指定为寄存器变量建议编译器将变量存储到寄存器中使用也可以修饰函数形参建议编译器通过寄存器而不是堆栈传递参数extern 指定对应变量为外部变量即标示变量或者函数的定义在别的文件中提示编译器遇到此变量和函数时在其他模块中寻找其定义const 与volatile合称“cv特性”指定变量不可被当前线程/进程改变但有可能被系统或其他线程/进程改变volatile 与const合称“cv特性”指定变量的值有可能会被系统或其他进程/线程改变强制编译器每次从内存中取得该变量的值**2 流程控制关键字****A .跳转结构4个**return 用在函数体中返回特定值或者是void值即不返回值continue 结束当前循环开始下一轮循环break 跳出当前循环或switch结构goto 无条件跳转语句**B .分支结构5个**if 条件语句后面不需要放分号else 条件语句否定分支与if连用switch 开关语句多重分支语句case 开关语句中的分支标记default 开关语句中的“其他”分支可选。**C .循环结构3个**1forfor循环结构for(1;2;3)4;的执行顺序为1-2-4-3- 2... 循环其中2为循环条件。在整个for循环过程中表达式1只计算 一次表达式2和表达式3则可能计算多次也可能一次也不计算。循环体可能多次执行也可能一次都不执行。2do do循环结构do 1 while(2); 的执行顺序是1-2-1...循环2为循环条件3while while循环结构while(1) 2; 的执行顺序是1-2-1...循环1为循环条件以上循环语句当循环条件表达式为真则继续循环为假则跳出循环。2C关键字 C11 关键字共73个。 新增关键字alignas、alignof、char16_t、char32_t、constexpr、decltype、noexcept、nullptr、static_assert、thread_local。
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是C11新增的以克服wchar_t在不同平台上无法保证确定宽度的缺点。
decltype
用于编译时推断类型。此外参与函数声明的另一种语法指定返回auto同时decltype引导trailing-return-type指定实际应该返回类型。decltype的操作数也不被求值。
nullptr
字面量nullptr是具有std::nullptr_t类型的右值是空指针常量。C98/03中表示空指针常量的NULL或0都会在重载中引起混淆而纯库的解决方案在这里也遇到困难所以有必要加入新的关键字来专门表示空指针。
noexcept
实践表明动态异常规范会影响运行时性能。新增的noexcept表示静态异常规范只指定函数模版是否有异常抛出这里noexcept即noexcept(true)表示没有异常抛出。除了异常规范noexcept可以作用于一个表达式来判断是否有异常这对于模版代码非常有用。
static_assert
用于编译时的静态断言若指定的表达式为false则编译失败。
auto
C11标准和C98/03标准的auto是不同的。C98/03标准中auto表示自动储存类型[6] C11标准中auto表示由编译器静态判断其应有的类型[4] 。
asm
用于语法
asm-definition:asm ( string-literal ) ;
意义由实现定义典型实现中传输其中的字符串给汇编器。
auto
在C98/03中这个这个关键字用于声明块中的变量的生存期为自动生存期若是对象同时具有自动存储类即生存期在块结束时结束。这样的变量被称为局部变量。这个关键字不常用因为即便省略声明的默认就是auto的。[6]
在C11中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在函数中还表示动态异常规范但在C11中被标记为过时由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是publicclass是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循环。C11新增了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则是C11指定的精度不小于double的浮点数。
其它关键字表示整数类型。从占用空间大小(sizeof)来看保证charshortintlonglong long。注意这些都不是相同的类型即便大小和范围都一致各自具有unsigned版本。其中long long是C11指定的不小于long的整数。
if,else
条件语句的组成部分。if表示条件之后else表示否定分支。
enum
构成枚举类型名的关键字。C11新增带作用域的枚举用enum class或enum struct两者等价声明。
explicit
这个关键字修饰构造函数声明表示显式构造函数模版显式构造函数不参与特定的重载。
C11从两个角度扩展了用法。其一是适用于转换函数模版类似构造函数避免不需要的重载。其二是列表初始化除非直接使用std::initializer_list显式构造函数被列表初始化忽略在C98/03中explicit仅对单一参数调用构造函数有意义这里打破了这个限制。
export
导出模版用于分离编译。当初标准委员会未经充分实践支持匆忙通过了这一决定被EDG证明具备不现实的可用性即便EDG唯一地实现了这一个特性他们也表示反对[7] 。MSVC、GCC、Clang等其它主流编译器前端都没有实现这一特性甚至这是唯一明显约定不符合C98/03的特性。C11废除了这个export关键字的含义但保留这个关键字供以后使用[3] 。
extern
extern意为“外来的”是存储类声明修饰符。这个关键字在C语言中即很不明确容易被混淆尤其是extern inline——好在C没有这种用法。extern表示被修饰的声明中名称的链接保持和之前的一致若已有相同声明存在或保持默认值若之前没有相同名称的声明存在——取决于声明的位置。在命名空间作用域注意包括全局命名空间extern表示外部链接若这里省略extern则对于const对象默认具有内部链接否则表示具有和命名空间一致的链接若顶层没有嵌套未命名的命名空间就是外部链接否则是内部链接。
C11新增extern用于模版显式实例化声明表示不在当前翻译单元实例化模版而在别处有定义。这可以提升编译效率。
friend
声明友元使其不受访问权限控制的限制。
inline
声明定义内联函数模版提示编译时内联——将所调用的代码嵌入到主调函数中。注意是否内联取决于实现——编译器有权不实际内联如果它认为这是必要的或更符合预期的目标代码质量。但inline还改变了ODR(One Definition Rule)的适用性。类似函数模版在头文件直接定义inline函数不会视为重复定义违反ODR而编译出错。C中一个函数若声明inline则每处声明都必须保证是inline和C语言允许extern inline或static inline不同——尽管C实现可以提供类似非标准的扩展。注意类成员函数若在类定义内给出定义则隐含inline。
C11中新增inline namespace指示命名空间中的名称同时是外层命名空间直接包含的名称。这便于命名空间的版本管理减少冲突。
mutable
用于类的非静态非const数据成员表示不受到成员函数的const的限制可以在const成员函数中使用。
namespace
表示命名空间——其中可以声明若干标识符组成的名称与其它命名空间不冲突。
可以声明一个命名空间或命名空间别名。
operator
和操作符连用指定一个重载了的操作符函数也包括operator new和operator delete。
private,protected,public
指定类成员或基类中的名称的访问权限控制分别表示仅供本类使用、供本类和派生类使用、不设限制。
register
提示声明的对象被放入寄存器中以便得到更好的性能。同inline类似并非强制不同的是这个提示经常被现代的编译器无视因此C11中被标记为过时的。
return
子程序返回语句终止当前函数执行使控制流返回到主调函数的调用后。若返回类型不是void可以同时带返回值。
static
和C语言类似声明静态存储期对象或指定一个函数的名称具有内部链接。在C还有另一个用途——用于类作用域声明表示声明的成员是类共有的不需要通过类的对象访问。类的静态数据成员也具有静态存储期除非被thread_local修饰。
sizeof
返回类型名或表达式具有的类型对应的大小。不能对函数使用虽然可能有非标准扩展。C11新增支持直接对类的数据成员作为操作数之前无法使用。sizeof的操作数是不被求值的利用这一点可以配合模版元编程测试类型正确性。
template
声明一个模板、模版的特化或显式实例化另见extern。模版用于打破类型系统的某些限制推迟类型检查到实例化得到具体的模版实例进行以复用代码实现泛型和参数化编程。
this
this是一种实体仅在类的非静态成员中使用是指向类的对象的指针右值。
typedef
用以给数据类型取别名。字面名义上是定义实际只是声明——这点和C语言的说法不同。
C11中可被using新增的用法代替。
virtual
声明虚基类或虚函数。具有虚基类或虚函数的类是多态类(polymorphic class)需要运行时提供支持来判断成员函数调用分派到的具体类型。
typeid
获取表达式的类型以std::type_info表示结果可能抛出std::bad_typeid。当操作数非多态类引用类型在编译时即可确定结果否则需要在运行时取得结果即RTTI。
typename
告诉编译器一个嵌套的限定名包含::中的未知的标识符是一个类型。这只在模板中需要区分依赖名称时使用。
另一种用法是在模版声明参数列表中表示模版类型参数可被class代替。
using
有两种基本用法using声明和using指示using namespace ...。
前者是声明引入命名空间或基类作用域内已经被声明的名称。后者引入命名空间内所有的名称。
C11新增了一类用法可以代替typename同时可以配合template使用typedef基于语法考虑未被允许加入这种用法。
void
特殊的“空”类型指定函数无返回值或无参数在参数列表中只能够唯一地使用用于表达式转换为void类型以丢弃计算值的必要C11加入了discarded-value-expression显式地指出了这一点或用于void*指针类型。
try
tryC中用于异常处理的组合。