c++标识符
如题:
答案:
1、详见关键字,说的很明白了,mycase不是关键字。
2、详见标识符规则,只能以字母和下划线打头,所以C不对。
C++关键字与标识符到底有哪些规律呢?
关键字:
每一个有特殊意义的C + +词汇表的标识符,不能将他们用于其他用途
其实是一个深入了解的过程,常用的一看就知道,不常用需要注意总结,记忆。
数据类型,
auto,bool,char,char16_t,char32_t,class,double,enum,false,float,int,long,nullptr,short,signed,struct,template,true,union,unsigned,void,wchar_t。
存储类别说明符
auto,extern,register,static,thread_local
程序控制,
asm,break,case,continue,default,do,else,for,goto,if,rturn,switch,while。
类型限定
const,mutable,volatile。
类型转换
const_cast,dynastic_cast,reinterpret_cast,static_cast,explicit。
异常处理
catch,try,throw,noexcept。
内存管理相关
new,delete,alignas,alignof,sizeof。
类相关
friend,namespace,operator,private,protected,public,this,using,virtual, class,explicit,template
编译优化相关
constexpr,inline,static_assert。
其他
export,dealtype,typedef,typeid,typename。
标粗的为重复的,只作参考吧。
重点了解下,不知道的和相对重点的:
class:
1)声明类;声明有作用域枚举类型(C++11 起);2)在模板声明中,class 可用于引入类型模板形参与模板模板形参;3)若作用域中存在具有与某个类类型的名字相同的名字的函数或变量,则 class 可附于类名之前以消歧义,这时被用作类型说明符
template:
声明模板类型
wchar_t:
宽字符类型。要求大到足以表示任何受支持的字符编码。
mutable:
可出现于任何类型说明符(包括声明文法的声明说明符序列)中,以指定被声明对象或被命名类型的常量性constness)或易变性(volatility)
dynastic_cast:
类型转换运算符,沿继承层级向上、向下及侧向,安全地转换到其他类的指针和引用。
###reinterpret_cast:
类型转换运算符。通过重新解释底层位模式在类型间转换。
static_cast:
类型转换运算符。用隐式和用户定义转换的组合在类型间转换
explicit:
- 指定构造函数或转换函数(C++11 起)或推导指引(C++17起)为显式,即它不能用于隐式转换和复制初始化。2) explicit说明符可以与常量表达式一同使用。当且仅当该常量表达式求值为true时函数为显式(C++20 起)。explicit说明符只可出现于在类定义之内的构造函数或转换函数(C++11 起)的声明说明符序列中。
noexcept:
1)noexcept运算符,进行编译时检查,若表达式声明为不抛出任何异常则返回true。2)noexcept说明符,指定函数是否抛出异常。
alignof:
用于内存对齐相关
operator:
为用户定义类型的操作数重载C++运算符。
constexpr:
constexpr 说明符声明可以在编译时求得函数或变量的值。然后这些变量和函数(若给定了合适的函数实参)可用于编译时生成常量表达式。用于对象或非静态成员函数 (C++14 前)声明的constexpr说明符蕴含const。用于函数声明的 constexpr说明符或static 成员变量 (C++17 起)蕴含inline。若函数或函数模板的任何声明拥有constexpr说明符,则每个声明必须都含有该说明符。
inline:
声明内联类型
static_assert:
声明编译时检查的断言
export:
用于引用文件外模板声明(C++11 前)。不使用并保留该关键词(C++11 起)(C++20 前)。标记一个声明、一组声明或另一模块为当前模块所导出(C++20 起)。
dealtype:
检查实体的声明类型,或表达式的类型和值类别。对于变量,指定要从其初始化器自动推导出其类型。对于函数,指定要从其return语句推导出其返回类型。(C++14 起)对于非类型模板形参,指定要从实参推导出其类型。(C++17 起)
typeid:
查询类型的信息。用于必须知晓多态对象的动态类型的场合以及静态类型鉴别。题所涉及
typename:
在模板声明中,typename可用作class的代替品,以声明类型模板形参和模板形参(C++17 起)。在模板的声明或定义内,typename可用于声明某个待决的有限定名类型。题所涉及
还要注意保留标识符。C++语言已经指定了它们的用途或保留它们的使用权。如:
C++语言保留了库头文件中使用的宏名。如果程序中包含了某个头文件,则不应该将该头文件中定义的宏名用作其他目的。
C++语言保留了以两个下划线或下划线和大写字母打头的名称,还将以单个下划线打头的名称保留用作全局变量。
C++语言保留了在库头文件中被声明为外部链接性的名称。如函数特征标(名称和参数列表)。
C++使用具有特殊意义的标识符来避免新增关键字。这些标识符不是关键字,但用于实现语言功能。
编译器根据上下文来判断他们是常规标识符还是用于实现语言功能。例如,virtual,delete,final,override等。
标识符定义规则:
标识符不能被一个关键字。关键词被保留。
标识符只能由字母、数字和下划线。这意味着这个名字不能包含符号(除下划线)还是空白。
标识符必须开始以字母或下划线。它不能以数字开头,。
C + +区分大小写字母。
关于命名变量:
变量名及函数是以小写字母打头,多个单词,从第二个单词起,首字母大写
类或接口,每个单词首字母大写。与《java基础之面向对象技术要点(含无法在包路径下创建普通文件夹的问题、标识符命名规则)》中命名规则一致。
命名空间命名:全部小写
文件命名:文件名字要全部小写,中间用_相连,后缀名为.cc .cpp和.h
常量和枚举命名:声明为 constexpr 或 const 的变量, 或在程序运行期间其值始终保持不变的, 命名时以 “k” 开头, 大小写混合