跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C++ 修饰符
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= 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++ 基础]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)