C++ 常量和字符定义解析

文章目录

1. 整数常量

2. 浮点常量

3. 布尔常量

4. 字符常量

5. 字符串常量

6. 定义常量

#define 预处理器

const 关键字

7. 修饰符类型

8. 类型限定符

const 实例

volatile 实例

mutable 实例

static 实例

register 实例

9. ASCII码表格


1. 整数常量

  • 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量
  • 常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。
  • 常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

85         // 十进制
0213       // 八进制 
0x4b       // 十六进制 
30         // 整数 
30u        // 无符号整数 
30l        // 长整数 
30ul       // 无符号长整数

2. 浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成,可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

3.14159       // 合法的 
314159E-5L    // 合法的 
510E          // 非法的:不完整的指数
210f          // 非法的:没有小数或指数
.e55          // 非法的:缺少整数或分数

3. 布尔常量

布尔常量共有两个,它们都是标准的 C++ 关键字:

  • true 值代表真。
  • false 值代表假。

4. 字符常量

字符常量是括在单引号中。如果常量以 L(仅当大写时)开头,则表示它是一个宽字符常量(例如 L'x'),此时它必须存储在 wchar_t 类型的变量中。否则,它就是一个窄字符常量(例如 'x'),此时它可以存储在 char 类型的简单变量中。

字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。

在 C++ 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。下表列出了一些这样的转义序列码:

转义字符含义ASCII码值(十进制)
\a警报007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\\代表一个反斜线字符""092
代表一个单引号(撇号)字符039
"代表一个双引号字符034
?代表一个问号063
\0数字0000
\ddd8进制转义字符,d范围0~73位8进制
\xhh16进制转义字符,h范围09,af,A~F3位16进制

代码示例:

#include <iostream>
using namespace std;int main()
{cout << "Hello\tWorld\n\n";return 0;
}

输出结果:

Hello   World

5. 字符串常量

字符串字面值或常量是括在双引号 "" 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。

可以使用 \ 做分隔符,把一个很长的字符串常量进行分行。

#include <iostream>
#include <string>
using namespace std;int main() {string greeting = "hello, runoob";cout << greeting;cout << "\n";     // 换行符string greeting2 = "hello, \runoob";cout << greeting2;return 0;
}

hello, runoob
hello, runoob

6. 定义常量

在 C++ 中,有两种简单的定义常量的方式:

  • 使用 #define 预处理器。
  • 使用 const 关键字。

#define 预处理器

下面是使用 #define 预处理器定义常量的形式:

#define identifier value
#include <iostream>
using namespace std;#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'int main()
{int area;  area = LENGTH * WIDTH;cout << area;cout << NEWLINE;return 0;
}
50

 

const 关键字

使用 const 前缀声明指定类型的常量,如下所示:

const type variable = value;
#include <iostream>
using namespace std;int main()
{const int  LENGTH = 10;const int  WIDTH  = 5;const char NEWLINE = '\n';int area;  area = LENGTH * WIDTH;cout << area;cout << NEWLINE;return 0;
}

50

7. 修饰符类型

C++ 允许在 char、int 和 double 数据类型前放置修饰符。

修饰符是用于改变变量类型的行为的关键字,它更能满足各种情境的需求。

下面列出了数据类型修饰符:

  • signed:表示变量可以存储负数。对于整型变量来说,signed 可以省略,因为整型变量默认为有符号类型。

  • unsigned:表示变量不能存储负数。对于整型变量来说,unsigned 可以将变量范围扩大一倍。

  • short:表示变量的范围比 int 更小。short int 可以缩写为 short。

  • long:表示变量的范围比 int 更大。long int 可以缩写为 long。

  • long long:表示变量的范围比 long 更大。C++11 中新增的数据类型修饰符。

  • float:表示单精度浮点数。

  • double:表示双精度浮点数。

  • bool:表示布尔类型,只有 true 和 false 两个值。

  • char:表示字符类型。

  • wchar_t:表示宽字符类型,可以存储 Unicode 字符。

修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。

这些修饰符也可以组合使用,修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如:unsigned long int

C++ 允许使用速记符号来声明无符号短整数无符号长整数。您可以不写 int,只写单词 unsigned、short 或 longint 是隐含的。例如,下面的两个语句都声明了无符号整型变量。

signed int num1 = -10; // 定义有符号整型变量 num1,初始值为 -10
unsigned int num2 = 20; // 定义无符号整型变量 num2,初始值为 20short int num1 = 10; // 定义短整型变量 num1,初始值为 10
long int num2 = 100000; // 定义长整型变量 num2,初始值为 100000long long int num1 = 10000000000; // 定义长长整型变量 num1,初始值为 10000000000float num1 = 3.14f; // 定义单精度浮点数变量 num1,初始值为 3.14
double num2 = 2.71828; // 定义双精度浮点数变量 num2,初始值为 2.71828bool flag = true; // 定义布尔类型变量 flag,初始值为 truechar ch1 = 'a'; // 定义字符类型变量 ch1,初始值为 'a'
wchar_t ch2 = L'你'; // 定义宽字符类型变量 ch2,初始值为 '你'

 代码示例:

#include <iostream>
using namespace std;/* * 这个程序演示了有符号整数和无符号整数之间的差别
*/
int main()
{short int i;           // 有符号短整数short unsigned int j;  // 无符号短整数j = 50000;i = j;cout << i << " " << j;return 0;
}
  • short unsigned int j; 定义了一个无符号短整数 j,它的取值范围是 0 到 65535。
  • short int i; 定义了一个有符号短整数 i,它的取值范围是 -32768 到 32767。

-15536 50000

8. 类型限定符

类型限定符提供了变量的额外信息,用于在定义变量或函数时改变它们的默认行为的关键字。

限定符含义
constconst 定义常量,表示该变量的值不能被修改。
volatile修饰符 volatile 告诉该变量的值可能会被程序以外的因素改变,如硬件或其他线程。。
restrict由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。
mutable表示类中的成员变量可以在 const 成员函数中被修改。
static用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件或函数访问。
register用于定义寄存器变量,表示该变量被频繁使用,可以存储在CPU的寄存器中,以提高程序的运行效率。

const 实例

const int NUM = 10; // 定义常量 NUM,其值不可修改
const int* ptr = &NUM; // 定义指向常量的指针,指针所指的值不可修改
int const* ptr2 = &NUM; // 和上面一行等价

volatile 实例

volatile int num = 20; // 定义变量 num,其值可能会在未知的时间被改变

mutable 实例

class Example {
public:int get_value() const {return value_; // const 关键字表示该成员函数不会修改对象中的数据成员}void set_value(int value) const {value_ = value; // mutable 关键字允许在 const 成员函数中修改成员变量}
private:mutable int value_;
};

static 实例

void example_function() {static int count = 0; // static 关键字使变量 count 存储在程序生命周期内都存在count++;
}

register 实例

void example_function(register int num) {// register 关键字建议编译器将变量 num 存储在寄存器中// 以提高程序执行速度// 但是实际上是否会存储在寄存器中由编译器决定
}

9. 存储类

存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。

  • auto:这是默认的存储类说明符,通常可以省略不写。auto 指定的变量具有自动存储期,即它们的生命周期仅限于定义它们的块(block)。auto 变量通常在栈上分配。

  • static:用于定义具有静态存储期的变量或函数,它们的生命周期贯穿整个程序的运行期。在函数内部,static变量的值在函数调用之间保持不变。在文件内部或全局作用域,static变量具有内部链接,只能在定义它们的文件中访问。

  • extern:用于声明具有外部链接的变量或函数,它们可以在多个文件之间共享。默认情况下,全局变量和函数具有 extern 存储类。在一个文件中使用extern声明另一个文件中定义的全局变量或函数,可以实现跨文件共享。

  • mutable (C++11):用于修饰类中的成员变量,允许在const成员函数中修改这些变量的值。通常用于缓存或计数器等需要在const上下文中修改的数据。

  • thread_local (C++11):用于定义具有线程局部存储期的变量,每个线程都有自己的独立副本。线程局部变量的生命周期与线程的生命周期相同。

#include <iostream>// 全局变量,具有外部链接,默认存储类为extern
int globalVar;void function() {// 局部变量,具有自动存储期,默认存储类为autoauto int localVar = 10;// 静态变量,具有静态存储期,生命周期贯穿整个程序static int staticVar = 20;const int constVar = 30; // const变量默认具有static存储期// 尝试修改const变量,编译错误// constVar = 40;// mutable成员变量,可以在const成员函数中修改class MyClass {public:mutable int mutableVar;void constMemberFunc() const {mutableVar = 50; // 允许修改mutable成员变量}};// 线程局部变量,每个线程有自己的独立副本thread_local int threadVar = 60;
}int main() {extern int externalVar; // 声明具有外部链接的变量function();return 0;
}

 

10. ASCII码表格

ASCII 码大致由以下两部分组成:

  • ASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。
  • ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。
ASCII控制字符ASCII字符ASCII字符ASCII字符
0NUT32(space)64@96
1SOH33!65A97a
2STX34"66B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92/124|
29GS61=93]125}
30RS62>94^126`
31US63?95_127DEL

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489527.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【单词搜索】python刷题记录

R2-回溯:DFS剪枝. class Solution:def exist(self, board: List[List[str]], word: str) -> bool:#回溯经典问题&#xff1a;DFS剪枝解决mlen(board)nlen(board[0])def dfs(i,j,k):#3种剪枝策略if not 0<i<m or not 0<j<n or board[i][j]!word[k]:return Falsei…

whaler_通过镜像导出dockerfile

1、Whaler简介 Whaler:从镜像导出Dockerfile&#xff0c;whaler英文释义捕鲸船。 2、下载安装 # wget -cO /usr/local/bin/whaler https://github.com/P3GLEG/Whaler/releases/download/1.0/Whaler_linux_amd64 3、赋予可执行权限 [rootlocalhost ~]# chmod x /usr/local/…

学习测试11-移动自动化(略)

安卓SDK 链接: https://pan.baidu.com/s/1P4v9K2RYAGEoA5M_93hHlQ?pwdqsbu 提取码: qsbu 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 记得配置环境变量 下载Appium软件 hub网址&#xff1a;https://github.com/appium/appium-desktop/releases 链接: https…

c++入门----类与对象(中)

OK呀&#xff0c;家人们承接上文&#xff0c;当大家看过鄙人的上一篇博客后&#xff0c;我相信大家对我们的c已经有一点印象了。那么我们现在趁热打铁再深入的学习c入门的一些知识。 类的默认成员函数 首先我们学习的是我们的默认函数。不知道大家刚读这个名词是什么反应。默认…

基于Shell脚本实现文件定时拷贝

需要开发一个需求&#xff0c;将服务器A的 批量数据文件 定时同步 到远程服务器B中&#xff0c;这里我们的基本思路为&#xff1a; 服务器A&#xff1a;存放数据文件服务器B&#xff1a;部署shell脚本&#xff0c;从服务器A中拉取文件至本地目录中。 注意&#xff1a;这里也可…

DDR3布线时候的经验总结

摆放BGA下面的滤波电容的时候注意不要让两个电容的电源和地对着头放&#xff0c;手工焊接时候容易短路 阻抗层必须是实心铜皮覆盖&#xff1a; &#xff08;3&#xff09;阻抗线一定要有阻抗参考层&#xff0c;一般以相邻的接地或电源层做参考层&#xff08;如顶层阻抗线&…

【React】详解classnames工具:优化类名控制的全面指南

文章目录 一、classnames的基本用法1. 什么是classnames&#xff1f;2. 安装classnames3. 导入classnames4. classnames的基本示例 二、classnames的高级用法1. 动态类名2. 传递数组3. 结合字符串和对象4. 结合数组和对象 三、实际应用案例1. 根据状态切换类名2. 条件渲染和类名…

解决腾讯云服务器登录宝塔面板忘记密码

文章目录 1.问题描述2.解决方案&#xff1a;3.总结 1.问题描述 宝塔忘记了密码&#xff0c;在腾讯云面板输入bt打算修改密码显示报错 2.解决方案&#xff1a; 输入如下指令 sudo bt再选择5即可修改密码&#xff08;如下图&#xff09; 3.总结 本质原因是自己直接输入bt…

【运算放大器】输入电压范围与输出电压范围

概述 总结运算放大器的输入电压范围和输出电压范围基本理论。 总结于《你好&#xff0c;放大器初识篇》。 文章目录 概述一、输入电压范围&#xff08;Input Voltage Range&#xff09;二、输出电压范围&#xff08; V O H / V O L V_{OH}/V_{OL} VOH​/VOL​ 或者 Swing fro…

Keras入门:一维线性回归问题

目录 一、一维变量线性回归 1. 数据生成 2. 建立训练模型 3. 作图 4. 完整代码 一、一维变量线性回归 1. 数据生成 import keras import numpy as np import matplotlib.pyplot as plt #matplotlib inline xnp.linspace(0, 100, 30) #0~100之间&#xff0c;生成30个数 y…

前端JS特效第58波:洋葱剥皮文本变形特效

洋葱剥皮文本变形特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>Onion Skinning Text Morphing</title><link…

若依ruoyi+AI项目二次开发(智能售货机运营管理系统)

(一) 帝可得 - 产品原型 - 腾讯 CoDesign (qq.com)

ctfshow-web入门-php特性(web137-web141)

目录 1、web137 2、web138 3、web139 4、web140 5、web141 1、web137 直接调用 ctfshow 这个类下的 getFlag 函数&#xff0c;payload&#xff1a; ctfshowctfshow::getFlag 查看源码&#xff1a; 拿到 flag&#xff1a;ctfshow{dd387d95-6fbe-4703-8ec5-9c8f9baf2bb5} 在…

19 Python常用内置函数——range()

range() 是 Python 开发中非常常用的一个内置函数。该函数返回具有惰性求值特点的 range 对象&#xff0c;其中包含左闭右开区间 [start, end) 内以 step 为步长的整数。 参数 start 默认为 0&#xff0c;step 默认为 1。 print(range(5)) print(list(range(5))) print(list(r…

我在Vscode学Java泛型(泛型设计、擦除、通配符)

Java泛型 一、泛型 Generics的意义1.1 在没有泛型的时候&#xff0c;集合如何存储数据1.2 引入泛型的好处1.3 注意事项1.3.1 泛型不支持基本数据类型1.3.2 当泛型指定类型&#xff0c;传递数据时可传入该类及其子类类型1.3.3 如果不写泛型&#xff0c;类型默认是Object 二、泛型…

Java语言程序设计——篇九(1)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 内部类 概述内部类—内部类的分类成员内部类实战演练 局部内部类实战演练 匿名内部类实战演练 静态内部类实战演练 概述 内部类或嵌套类&#…

【计算机网络】RIP路由协议实验

一&#xff1a;实验目的 1&#xff1a;掌握在路由器上配置RIPv2。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为&#xff1a;三层交换机1台、路由器2台。 软件&#xff1a;wireshark软件、记…

virtualbox ubuntu扩充磁盘大小

首先在虚拟存储管理里面修改磁盘大小 然后安装gparted sudo gparted 打开管理工具 选中要调整的区域右键选择调整区域大小 拖动上述位置就可以实现扩容。完成后点击应用 然后重启虚拟机即可。

WSL快速入门

1. WSL介绍 WSL文档地址&#xff1a;https://learn.microsoft.com/zh-cn/windows/wsl WSL&#xff1a;全称 Windows Subsystem for Linux&#xff0c;即windows上的Linux子系统&#xff08;虚拟机工具&#xff09;。是Win10推出的全新特性&#xff0c;可以更轻量地在Windows系统…

vue3中element tabs标签页 tab-click事件无法拿到最新值

element tabs标签页有2个常用的事件方法&#xff0c;tab-click 和 tab-change tab-click事件 tab-click事件&#xff1a;当用户点击Tab标签时触发&#xff0c;有2个返回参数&#xff0c; (pane: TabsPaneContext, ev: Event) pane.props.name 中可以获取到最新的tab页签绑定值 …