跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C++ 修饰符
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
预览
高级
特殊字符
帮助
标题
2级
3级
4级
5级
格式
插入
拉丁字母
扩展拉丁字母
国际音标
符号
希腊字母
希腊字母扩展
西里尔字母
阿拉伯字母
扩展阿拉伯字母
希伯来字母
孟加拉语字符集
泰米尔数字和符号
泰卢固语字符集
僧伽罗语字符集
梵文字符集
古吉拉特语字符集
泰语字符集
老挝语
高棉语字母
加拿大原住民音节文字
卢恩
Á
á
À
à
Â
â
Ä
ä
Ã
ã
Ǎ
ǎ
Ā
ā
Ă
ă
Ą
ą
Å
å
Ć
ć
Ĉ
ĉ
Ç
ç
Č
č
Ċ
ċ
Đ
đ
Ď
ď
É
é
È
è
Ê
ê
Ë
ë
Ě
ě
Ē
ē
Ĕ
ĕ
Ė
ė
Ę
ę
Ĝ
ĝ
Ģ
ģ
Ğ
ğ
Ġ
ġ
Ĥ
ĥ
Ħ
ħ
Í
í
Ì
ì
Î
î
Ï
ï
Ĩ
ĩ
Ǐ
ǐ
Ī
ī
Ĭ
ĭ
İ
ı
Į
į
Ĵ
ĵ
Ķ
ķ
Ĺ
ĺ
Ļ
ļ
Ľ
ľ
Ł
ł
Ń
ń
Ñ
ñ
Ņ
ņ
Ň
ň
Ó
ó
Ò
ò
Ô
ô
Ö
ö
Õ
õ
Ǒ
ǒ
Ō
ō
Ŏ
ŏ
Ǫ
ǫ
Ő
ő
Ŕ
ŕ
Ŗ
ŗ
Ř
ř
Ś
ś
Ŝ
ŝ
Ş
ş
Š
š
Ș
ș
Ț
ț
Ť
ť
Ú
ú
Ù
ù
Û
û
Ü
ü
Ũ
ũ
Ů
ů
Ǔ
ǔ
Ū
ū
ǖ
ǘ
ǚ
ǜ
Ŭ
ŭ
Ų
ų
Ű
ű
Ŵ
ŵ
Ý
ý
Ŷ
ŷ
Ÿ
ÿ
Ȳ
ȳ
Ź
ź
Ž
ž
Ż
ż
Æ
æ
Ǣ
ǣ
Ø
ø
Œ
œ
ß
Ð
ð
Þ
þ
Ə
ə
格式
链接
标题
列表
文件
讨论
参考
说明
输入内容
输出结果
斜体
''斜体文字''
斜体文字
粗体
'''粗体文字'''
粗体文字
粗斜体
'''''粗斜体文字'''''
粗斜体文字
说明
输入内容
输出结果
参考资料
页面文本。<ref>[https://www.example.org/ 链接文本],其他文本。</ref>
页面文本。
[1]
命名参考资料
页面文本。<ref name="测试">[https://www.example.org/ 链接文本]</ref>
页面文本。
[2]
复用参考资料
页面文本。<ref name="测试" />
页面文本。
[2]
显示参考资料列表
<references />
↑
链接文本
,其他文本。
↑
链接文本
= C++修饰符 = '''C++修饰符'''是用于改变变量、函数或类成员基本特性的关键字。它们可以调整存储方式、访问权限或行为特征,是C++类型系统的重要组成部分。本条目将详细介绍C++中的各种修饰符及其应用场景。 == 基本分类 == C++修饰符主要分为以下几类: === 1. 访问修饰符 === 控制类成员的访问权限: * <code>public</code> * <code>private</code> * <code>protected</code> === 2. 存储类修饰符 === 控制变量的生命周期和可见性: * <code>auto</code>(C++11后含义改变) * <code>register</code>(C++17弃用) * <code>static</code> * <code>extern</code> * <code>thread_local</code>(C++11) * <code>mutable</code> === 3. 类型修饰符 === 改变基本类型的特性: * <code>const</code> * <code>volatile</code> * <code>signed</code> * <code>unsigned</code> * <code>long</code> * <code>short</code> == 详细说明 == === 访问修饰符 === 控制类成员的访问权限: <syntaxhighlight lang="cpp"> class Example { public: // 公有成员,任何代码都可访问 int publicVar; private: // 私有成员,仅类内和友元可访问 int privateVar; protected: // 保护成员,类内、派生类和友元可访问 int protectedVar; }; </syntaxhighlight> === 存储类修饰符 === ==== static ==== 使变量具有静态存储期,或限制符号的链接性: <syntaxhighlight lang="cpp"> // 文件作用域的static变量 static int fileScoped = 42; // 内部链接 void func() { static int count = 0; // 保持值不变,仅初始化一次 ++count; std::cout << "Called " << count << " times\n"; } </syntaxhighlight> ==== extern ==== 声明变量在其他文件中定义: <syntaxhighlight lang="cpp"> // file1.cpp int globalVar = 10; // file2.cpp extern int globalVar; // 使用file1.cpp中定义的globalVar </syntaxhighlight> ==== mutable ==== 允许const成员函数修改特定成员: <syntaxhighlight lang="cpp"> class Cache { mutable int cacheValue; // 即使const函数也可修改 public: int getValue() const { if (!cacheValid) { cacheValue = computeValue(); // 允许修改 cacheValid = true; } return cacheValue; } }; </syntaxhighlight> === 类型修饰符 === ==== const === 创建不可修改的对象: <syntaxhighlight lang="cpp"> const int MAX_SIZE = 100; // 必须初始化 const int* ptr = &MAX_SIZE; // 指向const的指针 int* const ptr2 = &var; // const指针 const int* const ptr3 = &MAX_SIZE; // const指针指向const数据 </syntaxhighlight> ==== volatile === 防止编译器优化,用于硬件访问或多线程: <syntaxhighlight lang="cpp"> volatile bool interruptFlag = false; // 编译器不会优化对此变量的访问 </syntaxhighlight> ==== signed/unsigned === 改变整型的符号特性: <syntaxhighlight lang="cpp"> unsigned int positiveOnly = 42; signed int normalInt = -10; </syntaxhighlight> == 组合使用 == 修饰符可以组合使用,但需注意顺序和兼容性: <syntaxhighlight lang="cpp"> static const int SCREEN_WIDTH = 1024; // 静态常量 extern volatile bool systemRunning; // 外部易变变量 </syntaxhighlight> == 实际应用案例 == === 1. 单例模式中的static === <syntaxhighlight lang="cpp"> class Singleton { private: static Singleton* instance; // 静态成员 Singleton() {} // 私有构造函数 public: static Singleton* getInstance() { if (!instance) { instance = new Singleton(); } return instance; } }; Singleton* Singleton::instance = nullptr; // 静态成员初始化 </syntaxhighlight> === 2. 配置常量中的constexpr === <syntaxhighlight lang="cpp"> class Config { public: static constexpr int MAX_CONNECTIONS = 100; // 编译时常量 static constexpr double TIMEOUT = 2.5; }; </syntaxhighlight> === 3. 多线程中的volatile === <syntaxhighlight lang="cpp"> volatile bool shouldStop = false; void workerThread() { while (!shouldStop) { // 执行任务 } } // 其他线程可以设置shouldStop=true来停止工作线程 </syntaxhighlight> == 修饰符关系图 == <mermaid> graph TD A[C++修饰符] --> B[访问修饰符] A --> C[存储类修饰符] A --> D[类型修饰符] B --> E[public] B --> F[private] B --> G[protected] C --> H[static] C --> I[extern] C --> J[mutable] C --> K[thread_local] D --> L[const] D --> M[volatile] D --> N[signed/unsigned] D --> O[long/short] </mermaid> == 最佳实践 == 1. 优先使用<code>const</code>来保证不可变性 2. 谨慎使用<code>mutable</code>,仅在真正需要时 3. 避免使用已弃用的<code>register</code> 4. 在多线程环境中正确使用<code>volatile</code>和原子类型 5. 合理使用<code>static</code>减少全局变量污染 == 常见问题 == '''Q: const和constexpr有什么区别?''' A: <code>const</code>表示运行时常量,<code>constexpr</code>表示编译时常量。 '''Q: 为什么C++17弃用了register?''' A: 现代编译器能自动优化寄存器分配,此关键字已无实际作用。 '''Q: mutable会破坏const正确性吗?''' A: 不会,它只是为特定场景(如缓存)提供灵活性,但仍应谨慎使用。 == 总结 == C++修饰符提供了对程序元素行为的精细控制。理解并正确使用这些修饰符是写出高效、安全C++代码的关键。建议通过实际编码练习来掌握各种修饰符的组合使用方式。 [[Category:编程语言]] [[Category:C++]] [[Category:C++ 基础]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)