当前位置: 首页 > news >正文

西嘎嘎学习 - C++修饰符类型 - Day 5

1 什么是修饰符类型

        在C++中,修饰符类型(Type Modifiers) 是用来修饰基本数据类型的关键词,它们可以改变变量的大小符号性(有符号或无符号)等属性。

2  常见的修饰符类型

修饰符说明示例
signed表示有符号数(默认)signed int a;
unsigned表示无符号数(非负)unsigned int b;
short表示短整型(比 int 小)short c;
long表示长整型(比 int 大)long d;
long long表示更长的整型(C++11新增)long long e;

3  修饰符与基本类型的组合

        修饰符可以和基本类型(如 intchar)组合使用,以定义更精确的变量类型。

(1)signed 和 unsigned

        signed:表示变量可以存储正数、负数和零(默认)

        unsigned:表示变量只能存储非负数(0 和 正数)

        示例:

signed int a = -10;       // 可以存储负数
unsigned int b = 100;     // 只能存储非负数

(2)short、int、long、long long

类型通常占用字节数取值范围(示例)
short int2-32768 到 32767
int4-2147483648 到 2147483647
long int4 或 8取决于系统
long long int8-9223372036854775808 到 9223372036854775807

        示例:

short s = 100;
int i = 1000;
long l = 1000000;
long long ll = 1000000000000;

4  修饰符与 char 类型

        char 类型也可以使用  signed 和 unsigned 修饰符。

类型通常占用字节数取值范围(示例)
signed char1-128 到 127
unsigned char10 到 255
signed char sc = -10;
unsigned char uc = 200;

5  修饰符与 float 和 double

        float 和 double 是浮点类型,它们不能使用 signed 或 unsigned 修饰符,因为浮点数默认就是有符号的。

float f = 3.14;
double d = 3.1415926535;

6  修饰符的组合使用

unsigned long int uli = 1000000;
long long int lli = 1000000000000;

7  修饰符的命名规范

        虽然修饰符本身是英文,但变量名建议使用英文命名,并遵循驼峰命名法下划线命名法

unsigned int max_score = 100;
long long total_count = 1000000000;

8  完整示例

#include <iostream>
using namespace std;int main() {signed int a = -10;unsigned int b = 100;short s = 100;long l = 1000000;long long ll = 1000000000000;unsigned char uc = 200;cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "s = " << s << endl;cout << "l = " << l << endl;cout << "ll = " << ll << endl;cout << "uc = " << (int)uc << endl;  // 强制转换为 int 才能输出return 0;
}

9  总结

修饰符说明示例
signed有符号数signed int a;
unsigned无符号数unsigned int b;
short短整型short c;
long长整型long d;
long long更长的整型long long e;
char字符类型char ch = 'A';
float单精度浮点数float f = 3.14;
double双精度浮点数double d = 3.14159;



10  什么是类型限定符

        类型限定符(Type Qualifiers) 是C++中用于修饰变量的访问方式的关键词。它们不会改变变量的类型,但会限制变量的使用方式,比如是否可以被修改、是否可以被多个线程访问等。

11 C++中常用的类型限定符

限定符说明示例
const表示变量的值不能被修改const int x = 10;
volatile表示变量的值可能被外部修改(如硬件)volatile int flag;
restrict表示指针是唯一访问该内存的指针(C99引入,C++11支持)int* restrict p;
mutable允许类中的成员变量在 const 对象中被修改

12  const 限定符详解

(1)const 的作用

        const 表示变量的值不能被修改,一旦赋值,就不能再更改。

const int MAX_AGE = 120;
MAX_AGE = 130;  // ❌ 错误:不能修改 const 变量

(2)const 与指针

        const 可以修饰指针本身或指针指向的内容。

情况一:指针指向的内容不能被修改
const int* p = &x;
*p = 10;  // ❌ 错误:不能修改指针指向的内容情况二:指针本身不能被修改(不能指向其他地址)
int* const p = &x;
p = &y;  // ❌ 错误:不能修改指针本身情况三:指针和指向的内容都不能被修改
const int* const p = &x;
*p = 10;  // ❌ 错误
p = &y;   // ❌ 错误

(3)const 与函数参数

        在函数参数中使用 const,可以防止函数内部修改参数的值。

void printValue(const int value) {// value = 100;  // ❌ 错误:不能修改 const 参数cout << value << endl;
}

13 volatile 限定符详解

(1)volatile 的作用

        volatile 表示变量的值可能被外部修改,比如硬件、中断、多线程等。编译器不会对 volatile 变量进行优化,每次访问都会从内存中读取。

volatile int sensorValue;  // 表示这个值可能被外部硬件修改

(2)volatile 与 const 的组合

        const volatile 表示变量的值不能被程序修改,但可能被外部修改。

const volatile int temperature;  // 程序不能修改,但硬件可能修改

14  restrict 限定符详解

(1)restrict 的作用

        restrict 是C99引入的限定符,C++11也支持。它用于告诉编译器某个指针是唯一访问该内存的指针,从而允许编译器进行更激进的优化。

void add(int* restrict a, int* restrict b, int* restrict c) {*c = *a + *b;
}

        restrict 表示 abc 指向的内存区域互不重叠,编译器可以据此优化代码。

15  mutable 限定符详解

(1)mutable 的作用

        mutable 用于类的成员变量,表示该变量即使在 const 对象中也可以被修改

class Counter {
public:void increment() const {counter++;  // ✅ 允许修改 mutable 变量}private:mutable int counter = 0;
};

16  类型限定符的命名规范

        虽然限定符本身是英文,但变量名建议使用英文命名,并遵循驼峰命名法下划线命名法

const int MAX_SPEED = 120;
volatile int sensor_value;
mutable int call_count;

17  类型限定符的使用场景

限定符使用场景
const定义常量、防止变量被修改
volatile多线程、硬件寄存器、中断处理
restrict指针优化(C99/C++11)
mutable类中允许 const 对象修改变量

18  类型限定符的注意事项

  • const 变量必须在声明时初始化

  • volatile 不能与 const 冲突,但可以组合使用。

  • restrict 是C语言特性,C++中支持但使用较少

  • mutable 只能用于类的成员变量

19  完整示例

#include <iostream>
using namespace std;const int MAX_AGE = 120;
volatile int sensorValue = 0;class Counter {
public:void increment() const {counter++;}void print() const {cout << "Counter: " << counter << endl;}private:mutable int counter = 0;
};int main() {// const 变量cout << "最大年龄: " << MAX_AGE << endl;// volatile 变量cout << "传感器值: " << sensorValue << endl;// mutable 变量Counter c;c.increment();c.print();return 0;
}

20  总结

限定符说明示例
const值不能被修改const int x = 10;
volatile值可能被外部修改volatile int flag;
restrict指针是唯一访问该内存的指针int* restrict p;
mutable允许 const 对象修改变量mutable int counter;


文章转载自:

http://6TYfTH1o.kkgbs.cn
http://tbQTwhEd.kkgbs.cn
http://GZXP6vDb.kkgbs.cn
http://iNoU184Z.kkgbs.cn
http://OSVHgNA8.kkgbs.cn
http://h9imOTLH.kkgbs.cn
http://cfQtkP9U.kkgbs.cn
http://ed0mLMM4.kkgbs.cn
http://AjCHTrcR.kkgbs.cn
http://LVguzMxQ.kkgbs.cn
http://6NAzWpVx.kkgbs.cn
http://ffW1d92y.kkgbs.cn
http://GOmKJ2uf.kkgbs.cn
http://zo1IEPs6.kkgbs.cn
http://4C1hBWxm.kkgbs.cn
http://RJHaNff0.kkgbs.cn
http://BwWh87nd.kkgbs.cn
http://6FRsRRtZ.kkgbs.cn
http://NQtePr8U.kkgbs.cn
http://9FAu35Tt.kkgbs.cn
http://dx8GOLdP.kkgbs.cn
http://hdWbzBpS.kkgbs.cn
http://qjdUTWTy.kkgbs.cn
http://puac3fKc.kkgbs.cn
http://i67IR75L.kkgbs.cn
http://7Jm8j5VL.kkgbs.cn
http://OgXws3As.kkgbs.cn
http://F2Sjiign.kkgbs.cn
http://dX00VyiE.kkgbs.cn
http://5xhUvf3p.kkgbs.cn
http://www.dtcms.com/a/374034.html

相关文章:

  • 明远智睿RK3568核心板:199元解锁多行业智能新可能
  • LeetCode算法日记 - Day 36: 基本计算器II、字符串解码
  • linux系统address already in use问题解决
  • ArcGIS学习-17 实战-密度分析
  • 08 修改自己的Centos的软件源
  • 柯美bizhub 206复印机报 警告 维修召唤(M2) 维修召唤如何解决 如何维修
  • Vue3 页面切换白屏问题解决方案
  • [硬件电路-168]:Multisim - Multisim提供的用于学习参考电路有哪些?存放位置?
  • 使用kettle批量调用大模型
  • 【系统分析师】第1章-基础知识:绪论(核心总结)
  • docker-容器
  • ARM架构详解:从内核到异常处理
  • Redis缓存击穿、雪崩、穿透
  • Go正则表达式实战指南
  • 保持元素可见但不可访问的方法: `inert`
  • ClaudeCode稳定备用方案:API接入详解
  • 【教程】Ansible 环境部署
  • Linux-信号量
  • 3000h CeB₆ 灯丝加持的 Phenom XL G3 扫描电镜技术亮点
  • C语言scanf函数的空格问题
  • 【Git】使用GitCode的全局配置
  • 论文阅读:ACL 2023 MEETINGQA: Extractive Question-Answering on Meeting Transcripts
  • Docker Compose healthcheck介绍(监控容器中服务的实际健康状态)数据库健康检查pg_isready
  • 鸿蒙NEXT中SQLite数据库全面实战指南
  • Go语言文件处理实战指南
  • 【鸿蒙(openHarmony)ETS语言实现视频播放器的详细步骤】
  • SpringBoot教程(三十一) | SpringBoot集成SpringSecurity权限框架
  • 第四十九篇-Tesla P40+Fastllm+Hunyuan-A13B-Instruct+CPU+GPU混合部署推理
  • 安装docker遇到的问题1: [Errno 14] curl#35 - “TCP connection reset by peer“
  • 【Debug日志 | 模型loss不降】