C++语言学习(4): identifier 的概念

server/2024/10/20 16:32:44/

1. 什么是 identifier

identifier 中文意思是标识符,在 cppreference 中明确提到,identifier 是任意长度的数字、下划线、大写字母、小写字母、unicode 字符 的序列:

An identifier is an arbitrarily long sequence of digits, underscores, lowercase and uppercase Latin letters, and most Unicode characters

但是:

  • identifier 里的 unicode 通常没有被编译器很好的支持
  • 合法的 identifier 的第一个字符,不能是数字
  • C++ 语言的 keywords,也不能作为用户自定义的 identifier
    在这里插入图片描述

2. identifier 有什么用?

identifier 可以用作如下 entities 的命名(naming):

  • objects 对象
  • references 引用
  • functions 函数
  • enumerators 枚举元素
  • types 类型
  • class members 类成员
  • namespaces 命名空间
  • templates 模板
  • template specializations 模板特化
  • parameter packs(since C++11) 参数包(从C++11开始)
  • goto labels goto标签
  • other entities 其他 entities

并且,还有限制条件:

2.1 C++ keywords 通常不能作为新增的 identifier

作为 keywords 的 identifier,通常只能作为 keyword 使用,不能用于其他情况, 比如 int 是关键字,case 也是关键字,它们不能作为变量、引用、函数、namespace、模板、模板特化的名字;
在这里插入图片描述

不过也有例外,如 private 用来表示 attribute
在这里插入图片描述

2.2 alternative representations 不能作为新增的 identifier

alternative representations 指的是 operator_alternative, 我们只需要关注到 and, and_eq, bitand, bitor, compl, not, or, or_eq, xor, xor_eq 不能作为用户自定义的 identifier 的名字即可:
在这里插入图片描述

2.3 慎用下划线开头的相关名字

如下规则规定了 reserved (保留字)性质的 identifier,用户代码请别用它们作为 identifier:

  • 在全局作用域,如果是下划线开头,那么它是保留字,如 _test, _Test
  • 双下划线开头,或者下划线+大写字母开头,那么它也是保留字,如 __test, _Test

所谓 reserved, 是说标准库的头文件 #define 了或声明了这样的 identifier, 是用于内部使用的
在这里插入图片描述

总结

identifier 的构成: 是字母、数字、下划线组成的任意长度序列,并且还要求:

  • 不能数字开头
  • C++ 语言关键字也是 identifier 但只能用于 keyword,变量、函数、namespace等的命名并不能使用关键字
  • 全局作用域的下划线开头的identifier,或双下划线的identifier、下划线+大写字母开头的identifier,是保留字,用户请别用,除非你是标准库开发者

identifier 的一大用处是给 entity 命名,包括:objects、references、functions、enumerators、types、class members、 namespaces、templates、template specializations、parameter packs、goto lables 等

Refs

https://en.cppreference.com/w/cpp/language/identifiers
https://en.cppreference.com/w/cpp/keyword
https://en.cppreference.com/w/cpp/language/operator_alternative


http://www.ppmy.cn/server/126405.html

相关文章

看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?

看视频都喜欢看高清,那么一般来说看电影不卡顿需要多大带宽呢? 以4K为例,这里引用一位网友的回答:“视频分辨率4092*2160,每个像素用红蓝绿三个256色(8bit)的数据表示,视频帧数为60fps,那么一秒…

监控易监测对象及指标之:全面监控Sybase_New数据库

随着企业数据量的不断增长和业务的复杂化,数据库的稳定性和性能成为了保障业务连续性的关键因素。Sybase_New数据库作为众多企业选择的数据管理解决方案,其稳定性和性能对于企业的运营至关重要。 为了确保Sybase_New数据库的稳定运行和高效性能&#xff…

【EXCEL数据处理】000013 案例 EXCEL筛选与高级筛选。

前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000013 案例 EXCEL筛选与高级筛选。使用的软件&#…

51单片机系列-按键检测原理

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 独立按键是检测低电平的。 下面我们来看一张对应的电路原理图: 在这张图当中,P1,P2,P3内部都上拉了电阻,但是P0没有&am…

留存率的定义与SQL实现

1.什么是留存率 留存率是指在特定时间段内,仍然继续使用某项产品或服务的用户占用户总数的百分比。 通常,留存率会以日,周,或月为单位进行统计和分析。 2.SQL留存率常见问题 1.计算新用户登录的日期的次日留存率以及3日留存率 …

【docker】debian中配置docker(2024年9月)

首先Follow了一下菜鸟教程,然后遇到了curl的问题。 curl存在的问题 参见这篇文章。其中用到了vim进行编辑,笔者的环境是windows10putty,vim的粘贴操作参考这篇文章。 修改之后的curl没有问题了,成功把脚本下载下来了。 但是在…

【C++】C++基础

目录 一. C关键字(C98) 二、C的第一个程序 三、命名空间 3.1.namespace的价值 3.2.namespace的定义 3.2.命名空间使用 总结:在项目当中第一、第二种方法搭配使用,第三种冲突风险非常大,仅适合练习使用。 四、C输入&输出 五、缺省…

Go语言入门:掌握基础语法与核心概念

Go(又称 Golang)是一种开源的编程语言,由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 在 2007 年设计。Go 语言在设计时考虑了现代多核处理器的并发计算,其语法简洁、易于理解,同时提供了高效的编译和执行…