const 常规用法

const 关键字在 C++ 中用于表示常量,可以应用于变量、指针、函数参数、成员函数等。使用 const 可以提高代码的可读性和安全性,防止意外修改数据。

1. 常量变量

const int x = 10;

在这个例子中,x 是一个常量整数,不能被修改。

2. 常量指针和指向常量的指针

  • 指向常量的指针:
const int *ptr = &x;

ptr 是一个指向常量整数的指针,通过 ptr 不能修改所指向的值。

  • 常量指针:
int y = 20;
int *const ptr2 = &y;

ptr2 是一个常量指针,指针本身的值(即指向的地址)不能修改,但可以通过 ptr2 修改所指向的值。

  • 指向常量的常量指针:
const int z = 30;
const int *const ptr3 = &z;

ptr3 是一个指向常量整数的常量指针,既不能修改指针本身的值,也不能通过 ptr3 修改所指向的值。

3. 常量成员函数

在类中,常量成员函数保证不修改类的成员变量。

class MyClass {
public:
    int getValue() const {
        return value;
    }

private:
    int value = 42;
};

getValue 是一个常量成员函数,它不能修改 MyClass 类的成员变量。

4. 常量函数参数

使用 const 关键字可以确保函数参数在函数内部不会被修改。

void printValue(const int value) {
    std::cout << value << std::endl;
}

在这个例子中,printValue 函数保证不会修改传入的参数 value。

5. 常量返回值

如果函数返回一个常量引用或指针,可以防止调用者修改返回的值。

const int& getConstValue() {
    static int value = 100;
    return value;
}

getConstValue 返回一个常量引用,调用者不能修改返回的值。

示例代码

以下是一个综合运用 const 关键字的示例:

#include <iostream>

class Example {
public:
    Example(int val) : value(val) {}

    // 常量成员函数
    int getValue() const {
        return value;
    }

    // 非常量成员函数
    void setValue(int val) {
        value = val;
    }

private:
    int value;
};

void printValue(const Example& ex) {
    std::cout << "Value: " << ex.getValue() << std::endl;
}

int main() {
    const int x = 10;  // 常量变量
    int y = 20;
    const int *ptr1 = &x;  // 指向常量的指针
    int *const ptr2 = &y;  // 常量指针

    Example ex(42);  // 隐式转换
    printValue(ex);  // 使用常量函数参数

    ex.setValue(100);
    printValue(ex);

    return 0;
}

输出结果

Value: 42
Value: 100

这个示例展示了 const 关键字的各种用法,从常量变量到常量成员函数,以及如何通过函数参数使用 const 确保数据安全。

6. const 和指针的深入理解

以下示例展示了如何使用 const 关键字以及如何在不同情况下修改值:

#include <iostream>

int main() {
    const int x = 10; // 常量变量
    // x = 20; // 这行代码会报错

    int a = 10;
    int b = 20;
    const int *ptr1 = &a; // 指向常量的指针
    // *ptr1 = 15; // 这行代码会报错
    ptr1 = &b; // 这行代码是合法的

    int c = 30;
    int d = 40;
    int *const ptr2 = &c; // 常量指针
    *ptr2 = 35; // 这行代码是合法的
    // ptr2 = &d; // 这行代码会报错

    int e = 50;
    const int *const ptr3 = &e; // 指向常量的常量指针
    // *ptr3 = 55; // 这行代码会报错
    // ptr3 = &d; // 这行代码也会报错

    std::cout << "x: " << x << std::endl;
    std::cout << "a: " << a << ", b: " << b << std::endl;
    std::cout << "*ptr1: " << *ptr1 << std::endl;
    std::cout << "c: " << c << ", d: " << d << std::endl;
    std::cout << "*ptr2: " << *ptr2 << std::endl;
    std::cout << "e: " << e << std::endl;
    std::cout << "*ptr3: " << *ptr3 << std::endl;

    return 0;
}

输出结果

x: 10
a: 10, b: 20
*ptr1: 20
c: 35, d: 40
*ptr2: 35
e: 50
*ptr3: 50

这个示例展示了如何使用和修改 const 变量和指针。在使用 const 的情况下,了解哪些可以修改、哪些不能修改对于编写安全和稳定的代码非常重要。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王成长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值