C++修饰符类型

一、存储类运算符

auto(自动存储类,但在现代C++中,它通常用于自动类型推导)

register(建议编译器将变量存储在寄存器中,但现代编译器通常忽略此关键字)

static(静态存储类,用于局部变量、全局变量、函数和类成员)

extern(用于声明在其他地方定义的变量或函数)

mutable(允许在const类的非常量成员函数中修改成员变量)

thread_local(C++11引入,用于声明变量的生命周期与线程相同)

二、类型修饰符

const(常量,不可修改)

volatile(告诉编译器不要优化对该变量的访问,因为它可能在程序外部被修改)

signed 和 unsigned(用于整数类型,表示数值的符号属性)

long 和 short(用于调整整数类型的大小)

explicit(用于构造函数,防止不希望的隐式类型转换)

三、访问修饰符(在类中)

public(成员可以被任何代码访问)

protected(成员可以被类的成员函数、友元函数或派生类访问)​​​​​​

private(成员只能被类的成员函数和友元函数访问)

四、作用域解析运算符​​​​​​​

::(作用域解析运算符,用于指定类、命名空间或其他作用域中的成员)

五、函数修饰符

inline(建议编译器内联函数,即将函数调用替换为函数体,以减少函数调用的开销)

virtual(在基类中声明,允许派生类覆盖该函数)

override(C++11引入,确保成员函数确实覆盖了基类中的虚函数)

final(C++11引入,禁止类被继承,或禁止虚函数在派生类中被覆盖)

​​​​​​​noexcept(C++11引入,指定函数不会抛出异常)

六、模板修饰符

​​​​​​​template(用于声明模板类、模板函数等)

七、友元修饰符

​​​​​​​​​​​​​​friend(声明友元函数或友元类,这些函数或类可以访问类的私有和保护成员)

举个例子

//访问修饰符
class MyClass {  
public:  
    int publicVar;  
protected:  
    int protectedVar;  
private:  
    int privateVar;  
};  
  
int main() {  
    MyClass obj;  
    obj.publicVar = 10; // 访问 public 成员  
    // obj.protectedVar = 20; // 错误:无法从类外部直接访问 protected 成员  
    // obj.privateVar = 30; // 错误:无法从类外部直接访问 private 成员  
    return 0;  
}

//存储修饰符
class MyClass {  
public:  
    static int staticVar; // 静态成员变量  
};  
  
int MyClass::staticVar = 0; // 静态成员变量需要在类外部定义  
  
void function() {  
    extern int globalVar; // 声明外部变量  
    // ... 假设 globalVar 在其他地方已定义  
  
    register int regVar; // register 修饰符在现代编译器中通常被忽略  
  
    const class WithConst {  
    public:  
        mutable int mutVar; // 可变的成员变量,可以在 const 成员函数中被修改  
    } obj;  
    const WithConst* constPtr = &obj;  
    constPtr->mutVar = 5; // 可以在 const 成员函数外通过非 const 指针修改 mutable 成员  
}  
  
// thread_local 示例  
thread_local int tlsVar = 0; // 每个线程都有自己的 tlsVar 副本

//类型修饰符
const int constVar = 10; // 不可变的整数  
volatile int volVar; // 可能被外部因素(如硬件)改变的整数  
signed int signedInt = -5; // 有符号整数  
unsigned int unsignedInt = 5; // 无符号整数  
short shortVar = 100; // 短整数  
long longVar = 1000000000; // 长整数  
float floatVar = 3.14f; // 单精度浮点数  
double doubleVar = 3.141592653589793; // 双精度浮点数  
long double longDoubleVar = 3.141592653589793238L; // 扩展双精度浮点数

//函数修饰符
class Base {  
public:  
    virtual void virtualFunc() { /* ... */ } // 虚函数  
};  
  
class Derived : public Base {  
public:  
    void virtualFunc() override { /* ... */ } // 重写虚函数并使用 override 修饰符  
};  
  
class FinalClass final { // 使用 final 修饰符的类,不能被继承  
public:  
    void finalFunc() final { /* ... */ } // 使用 final 修饰符的函数,不能被重写  
};  
  
class NoImplicitConv {  
public:  
    explicit NoImplicitConv(int x) : value(x) {} // 构造函数使用 explicit 修饰符,防止隐式转换  
private:  
    int value;  
};  
  
void noExceptFunc() noexcept { // 声明函数不会抛出异常  
    // ...  
}

//其他
constexpr int constexprVar = 10; // 编译时常量  
alignas(double) char alignedArray[sizeof(double) * 10]; // 强制对齐的数组

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AD20使用操作Part2

元件的放置 在原理图界面,在右下角,Panels 选择Components 在自己元件库直接拖过来,放到原理图。 器件的复制和对齐 双击边缘,更改为A3纸 画方格,把元件给规划:放置——绘图工具——线 Shift空格&am…

【linux网络(七)】数据链路层详解

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux网络 1. 前言2. 认识MAC…

Android --- 新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了

新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了 大概原因就是,初始化默认Google的安卓模拟器占用的RAM内存是2048,如果电脑的性能和内存一般的话就可能卡死,解决方案是手动修改安卓模拟器的config文件&…

运营商如何通过PCDN技术提高用户服务?

着互联网的快速发展,用户对网络速度和质量的要求越来越高。为了满足这些需求,内容分发网络(CDN)成为了关键的基础设施。而在CDN技术中,PCDN(PersonalCDN)作为一种新兴的技术,为运营商和用户提供了新的解决方案。本文将重点介绍PCD…

RuoYi-Vue项目后端增加自己的模块,要注意的点,只看我这一片就够了。

若依版本: RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 背景: 后端想自己增加一个模块,但是包路径…

聊聊 golang 的 map

1、哈希表 哈希表是一个很常见的数据结构,用来存储无序的 key/value 对,给定的 key 可以在 O(1) 时间复杂度内查找、更新或删除对应的 value。 设计一个好的哈希表,需要着重关注两个关键点:哈希函数、冲突处理。 1.1 哈希函数 …

文件上传漏洞---Pyload

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 本文重点从靶场案例分析文件上传漏洞常见的Pylod,本文演示靶场upload-labs 一.文件类型---Pyload 不同的文件对应不同的文件类型,后端代码通过限制特定的文件类型…

【C++】C++指针在线程中调用与受保护内存空间读取方法

引言 在C的多线程编程中,正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时,对受保护内存空间的访问必须谨慎处理,以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C指针在线程中调用时如何…

提升入住率|智慧酒店解决方案,打造有温度的居住体验!

近年来,智慧酒店被越来越多的人关注,由生物识别、物联网技术和互联网技术融合产生的智慧酒店解决方案,不仅可以提升顾客在酒店的入住体验,还可以帮助酒店降低运营成本,这也让越来越的酒店选择了智慧酒店的赛道&#xf…

c++读取文件时出现中文乱码

原因:UTF-8格式不支持汉字编码 解决:改成ANSI,因为ANSI编码支持汉字编码

新款奔驰GLE350升级原厂空气悬挂系统有哪些功能

奔驰 GLE350 升级原厂空气悬挂带来了一系列显著的优势和功能: 1. 舒适性提升 • 能够根据不同的路况和驾驶模式自动调节悬挂硬度和高度,有效过滤路面颠簸,为驾乘者提供更加平稳、舒适的行驶体验。 2. 行驶高度调节 • 驾驶者可以手动或自…

明日周刊-第14期

不好意思又拖更了哈哈哈。不过赶在7月的第一天,打算更新一下。建党节,值得纪念的一天。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 国内科技新闻 深中通道建成通车 时间:2024年6月30日 内容:深圳至中山跨江通道正式建成开…

【06】SpringBoot与Web开发

1、基于Restful风格的接口 RestController RequestMapping("/demo") public class DemoController {GetMapping("/hello")public String getHello(){return "SpringBoot HelloWorld! 123";}GetMapping("/{id}")public User getUser(P…

【支撑文档】系统安全保证措施(word原件)

软件安全保证措施word 软件所有全套资料获取进主页或者本文末个人名片直接。

图形的搭建

例一: 输入描述: 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。 输出描述: 针对每行输入,输出用“*”组成的X形图案。 示例一&…

【C语言】19.预处理详解

文章目录 1.预定义符号2.#define定义常量3.#define定义宏4.带有副作用的宏参数5.宏替换的规则6.宏函数的对比7.#和##7.1 #运算符7.2 ## 运算符 8.命名约定9.#undef10.命令行定义11.条件编译12.头文件的包含12.1 头⽂件被包含的⽅式12.1.1 本地⽂件包含12.1.2 库⽂件包含 12.2 嵌…

基于协同过滤的航空票务推荐系统的设计与实现(飞机票推荐系统)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

鸿蒙OS开发者高级学习第2课:自由流转(含习题答案)

自由流转两种形态:相继使用(跨端迁移);同时使用( 多端协同) 习题:

【云原生】服务网格(Istio)如何简化微服务通信

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、微服务架构的兴起 2、Istio:服务网格的佼…

《昇思25天学习打卡营第27天 | 昇思MindSporeShuffleNet图像分类》

27天 本节学习了ShuffleNet图像分类 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端,模型的设计目标就是利用有限的计算资源来达到最好的模型精度。设计核心是引入了两种操作:Pointwis…