手把手教你学C++(八)--C++ 存储类型修饰符

目录

1. 存储类型修饰符(Storage Class Specifiers)

1.1 auto

示例:

1.2 register

示例:

1.3 static

示例:

1.4 extern

示例:

2. 类型限定符(Type Qualifiers)

2.1 const

示例:

2.2 volatile

示例:

3. 控制类型修饰符(Control Type Specifiers)

3.1 restrict

示例:

4. 访问控制修饰符(Access Specifiers)

4.1 public

4.2 private

4.3 protected

示例:

总结


 

在 C++ 中,修饰符(modifiers)用于进一步限定或改变变量、函数或其他声明的性质。修饰符可以影响变量的作用域、生命周期、存储类型等方面。以下是 C++ 中常用的几种修饰符类型及其用途:

1. 存储类型修饰符(Storage Class Specifiers)

存储类型修饰符用于指定变量的存储类型,即变量的生命周期和可见性。

1.1 auto

auto 关键字用于自动推断变量的类型。从 C++11 开始引入,主要用于简化变量声明。

示例:

 

cpp

深色版本

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    auto y = x; // y 的类型自动推断为 int
    cout << "y: " << y << endl;
    return 0;
}

1.2 register

register 关键字用于建议编译器将变量存储在寄存器中,以提高访问速度。不过,现代编译器通常会忽略此关键字。

示例:

 

cpp

深色版本

#include <iostream>
using namespace std;

int main() {
    register int x = 10; // 建议存储在寄存器中
    cout << "x: " << x << endl;
    return 0;
}

1.3 static

static 关键字用于指定变量的存储持续期(storage duration)为整个程序的生命周期。当用于局部变量时,变量只在首次初始化时分配内存,并在整个程序运行期间保持不变;当用于全局变量时,变量的可见性仅限于定义它的文件。

示例:

 

cpp

深色版本

#include <iostream>
using namespace std;

int main() {
    int count = 0;
    static int staticCount = 0; // 存储持续期为整个程序的生命周期

    for (int i = 0; i < 5; ++i) {
        staticCount++; // 每次循环递增
    }

    cout << "Static count: " << staticCount << endl;
    return 0;
}

1.4 extern

extern 关键字用于声明一个变量或函数是在其他文件中定义的。这使得可以在多个文件之间共享变量或函数。

示例:

假设你有两个源文件 main.cpputil.h

util.h

 

cpp

深色版本

extern int globalVar;

util.cpp

 

cpp

深色版本

int globalVar = 100;

main.cpp

 

cpp

深色版本

#include <iostream>
#include "util.h"
using namespace std;

int main() {
    cout << "Global variable: " << globalVar << endl; // 访问定义在 util.cpp 中的 globalVar
    return 0;
}

2. 类型限定符(Type Qualifiers)

类型限定符用于进一步限定变量的类型。

2.1 const

const 关键字用于声明一个变量或函数的某些部分是常量,即在程序运行期间其值不能被改变。

示例:

 

cpp

深色版本

#include <iostream>
using namespace std;

int main() {
    const int PI = 3.14159; // 常量 PI
    cout << "PI: " << PI << endl;
    return 0;
}

2.2 volatile

volatile 关键字用于声明一个变量可能会在不受程序控制的情况下发生变化,通常用于硬件访问。

示例:

 

cpp

深色版本

#include <iostream>
using namespace std;

int main() {
    volatile int sensorValue; // 可能会在不受程序控制的情况下变化
    // 假设 sensorValue 由外部硬件更新
    cout << "Sensor Value: " << sensorValue << endl;
    return 0;
}

3. 控制类型修饰符(Control Type Specifiers)

控制类型修饰符用于进一步控制变量的行为。

3.1 restrict

restrict 关键字用于指示编译器一个指针是唯一指向所指对象的指针,这允许编译器生成更高效的代码。

示例:

 

cpp

深色版本

#include <iostream>
using namespace std;

void process(float restrict data) {
    // data 是唯一指向所指对象的指针
}

int main() {
    float data = 3.14;
    process(data);
    return 0;
}

4. 访问控制修饰符(Access Specifiers)

在 C++ 类定义中,访问控制修饰符用于指定类成员的访问级别。

4.1 public

public 成员可以在类的外部被访问。

4.2 private

private 成员只能在类的内部被访问。

4.3 protected

protected 成员只能在类的内部和派生类中被访问。

示例:

 

cpp

深色版本

#include <iostream>
using namespace std;

class Base {
protected:
    int protectedVar;

public:
    Base() : protectedVar(10) {}
    void setProtectedVar(int val) { protectedVar = val; }
    int getProtectedVar() const { return protectedVar; }
};

class Derived : public Base {
public:
    void display() const {
        cout << "Protected var: " << getProtectedVar() << endl;
    }
};

int main() {
    Derived d;
    d.setProtectedVar(20);
    d.display();
    return 0;
}

总结

修饰符在 C++ 中用于进一步限定或改变变量、函数或其他声明的性质。正确使用修饰符可以帮助你更好地控制变量的作用域、生命周期、存储类型等方面,从而写出更清晰、更安全的代码。理解并熟练运用这些修饰符,可以使你的 C++ 程序更加健壮和高效。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值