c++修饰符类型

简介: c++修饰符类型

在C++中,修饰符(Modifiers)是用于改变变量、函数或其他对象的性质或行为的关键词。这些修饰符在编程中起着至关重要的作用,因为它们可以控制数据的访问权限、生命周期、链接属性以及其他特性。以下是对C++中一些主要修饰符的详细讲解,并附带编程示例。

1. 存储类修饰符

存储类修饰符用于指定变量的存储期和可见性。

· auto:自动存储类。这是局部变量默认的存储类。在函数内部声明的变量(包括在函数内部定义的变量和在函数参数中定义的变量)默认为自动存储类。

· register:建议编译器将变量存储在寄存器中,以提高访问速度。但是,现代的编译器优化技术使得register修饰符的实际效果变得不那么明显。

· static:静态存储类。在函数内部声明的静态变量只会被初始化一次,并且在函数调用之间保持其值。在函数外部声明的静态变量具有文件作用域,但其生命周期是整个程序的执行期间。

· extern:外部存储类。用于声明在其他文件中定义的变量或函数。在多个文件之间共享全局变量时,extern修饰符是必需的。

编程示例

#include <iostream> 
// 文件作用域静态变量 
static int fileScopeStatic = 42; 
void function() { 
// 函数内部静态变量 
static int functionScopeStatic = 0; 
functionScopeStatic++; 
std::cout << "Function scope static: " << functionScopeStatic << std::endl; 
// 自动存储类变量 
int autoVariable = 10; 
std::cout << "Auto variable: " << autoVariable << std::endl; 
} 
int main() { 
extern int fileScopeStatic; // 声明外部变量 
std::cout << "File scope static: " << fileScopeStatic << std::endl; 
function(); // 调用函数,输出函数内部静态变量的值 
function(); // 再次调用函数,函数内部静态变量的值会递增 
return 0; 
}

2. 访问修饰符(类成员访问修饰符)

在C++类中,访问修饰符用于控制类成员的访问权限。

· public:类的公有成员可以在类的外部被访问。

· protected:类的保护成员只能在类内部(包括派生类)被访问,但不能在类的外部被直接访问。

· private:类的私有成员只能在类内部被访问,不能在类的外部或派生类中被直接访问。

编程示例

class MyClass { 
public: 
int publicMember; 
void publicFunction() { /* ... */ } 
protected: 
int protectedMember; 
void protectedFunction() { /* ... */ } 
private: 
int privateMember; 
void privateFunction() { /* ... */ } 
}; 
int main() { 
MyClass obj; 
obj.publicMember = 10; // 访问公有成员 
obj.publicFunction(); // 调用公有函数 
// obj.protectedMember = 20; // 错误!不能从类的外部访问保护成员 
// obj.protectedFunction(); // 错误!同样不能从类的外部调用保护函数 
// obj.privateMember = 30; // 错误!不能从类的外部访问私有成员 
// obj.privateFunction(); // 错误!同样不能从类的外部调用私有函数 
return 0; 
}

3. 其他修饰符

· const:用于声明常量。常量是一个不能被修改的值。

· volatile:告诉编译器不要对该变量的访问进行优化,因为该变量的值可能会在程序不知道的情况下被改变(例如,由硬件或并发线程修改)。

· inline:建议编译器内联函数的调用,即将函数体直接插入到每个调用点,以减少函数调用的开销。但是否真正内联取决于编译器的优化能力。

· mutable:通常与const一起使用在类的成员变量上,表示即使类的实例是常量的,这个成员变量也可以被修改。

总结

C++的修饰符为程序员提供了灵活的方式来控制数据的存储、访问和特性。通过合理使用这些修饰符,可以提高代码的可读性、可维护性和性能。在编写C++程序时,应根据具体需求选择合适的修饰符来定义变量、函数和类。

相关文章
|
9天前
|
存储 程序员 C语言
c++primer plus 6 读书笔记 第四章 复合类型
c++primer plus 6 读书笔记 第四章 复合类型
|
30天前
|
C++
c++ sting类型比较大小(文本数值大小比较)
c++ sting类型比较大小(文本数值大小比较)
|
1天前
|
存储 编译器 程序员
C++一分钟之-auto关键字与类型推导
【6月更文挑战第21天】`auto`在C++11中重生,简化了类型声明,尤其在处理复杂类型时。它让编译器根据初始化值推导变量类型,减少了冗余和错误。使用`auto`简化了迭代器声明和函数返回类型推导,但也带来挑战:类型推导可能不直观,未初始化的`auto`是错误的,且过度使用影响可读性。使用`auto&`和`auto*`明确引用和指针,`decltype`辅助复杂类型推导,保持适度使用以维持代码清晰。
13 1
|
3天前
|
C语言 C++
C++对C的改进和拓展\string类型
C++对C的改进和拓展\string类型
5 1
|
10天前
|
C++
c++语言核心技术要点,《运行时类型识别RTTI》
c++语言核心技术要点,《运行时类型识别RTTI》
17 2
|
26天前
|
存储 安全 编译器
c++变量类型
c++变量类型
22 1
|
1月前
|
C++
C++程序中的结构体类型
C++程序中的结构体类型
23 1
|
1月前
|
存储 安全 C语言
C++|多态性与虚函数(1)功能绑定|向上转换类型|虚函数
C++|多态性与虚函数(1)功能绑定|向上转换类型|虚函数
|
1月前
|
安全 编译器 程序员
【C++入门到精通】C++类型的转换 | static_cast | reinterpret_cast | const_cast | dynamic_cast [ C++入门 ]
【C++入门到精通】C++类型的转换 | static_cast | reinterpret_cast | const_cast | dynamic_cast [ C++入门 ]
20 0
|
2天前
|
C++
C++一分钟之-类与对象初步
【6月更文挑战第20天】C++的类是对象的蓝图,封装数据和操作。对象是类的实例。关注访问权限、构造析构函数的使用,以及内存管理(深拷贝VS浅拷贝)。示例展示了如何创建和使用`Point`类对象。通过实践和理解原理,掌握面向对象编程基础。
29 2
C++一分钟之-类与对象初步