📜  C ++ | const关键字|问题1(1)

📅  最后修改于: 2023-12-03 14:39:38.145000             🧑  作者: Mango

C++ | const关键字|问题1

在 C++ 中,const 是用来修饰变量的关键字,表示该变量的值不可被修改。它可以被应用于多种不同的场景中,比如函数参数、成员函数等等。在这篇文章中,我们将会深入探讨 const 关键字的用法,以及一些可能会遇到的问题。

基本用法

在定义一个常量变量时,我们需要在其名字前使用 const 关键字来修饰它:

const int HEIGHT = 100;

除了在定义常量时使用 const 以外,我们还可以使用 const 关键字修饰函数参数和成员函数:

class Shape {
public:
    virtual double Area() const =0;
}

在上面的例子中,const 在函数后面表示该成员函数不会修改类的成员变量。

常量指针和指向常量的指针

常量指针和指向常量的指针是两个容易混淆的概念。常量指针可以改变指向的变量的值,但不可以改变指针本身的值,而指向常量的指针在指针本身上是可以修改的,但是不能修改它所指向的常量的值。

下面是一个示例程序,可以帮助我们更好地理解它们之间的区别:

int main() {
    int x = 10;
    const int *p1 = &x; // 指向常量的指针
    int * const p2 = &x; // 常量指针

    std::cout << "p1: " << *p1 << ", p2: " << *p2 << std::endl;

    *p2 = 20;
    std::cout << "p1: " << *p1 << ", p2: " << *p2 << std::endl;

    p1 = &HEIGHT;
    std::cout << "p1: " << *p1 << ", p2: " << *p2 << std::endl;

    return 0;
}

在上面的程序中,我们定义了两个指针 p1 和 p2,分别指向变量 x。其中,p1 是指向常量的指针,也就是说,我们不能通过它来修改 x 的值;而 p2 是常量指针,也就是说,我们不能通过它来修改它所指向的变量的值。

接下来,我们通过修改 p2 指向的变量来验证这两种指针的区别。然后,我们让 p1 指向 HEIGHT 这个常量,保存在内存的代码段,这时 x 的值并没有被修改,但是 p1 的指向却发生了变化。

const_cast

const_cast 是 C++ 中的一个关键字,它可以将变量从 const 类型转变成非 const 类型,从而使得被 const 修饰的变量也能够被修改。

int main() {
    const int x = 10;

    int &y = const_cast<int&>(x);
    y = 20;

    std::cout << "x: " << x << ", y: " << y << std::endl;

    return 0;
}

在上面的程序中,我们首先定义了一个 const 类型的变量 x,接着使用 const_cast 将其转换为非 const 类型,最后修改 y 的值。我们可以发现,虽然 x 是 const 类型的变量,但是 y 是可以被修改的。但是,我们不建议在代码中过多使用 const_cast,因为它会破坏 const 类型的安全性。

总结

在 C++ 中,const 关键字可以帮助我们定义常量、保护变量不被修改,并且还可以在函数的声明和定义中对参数和成员函数进行修改。通过本文,我们已经掌握了 const 关键字的基本用法、常量指针和指向常量的指针,以及 const_cast 的使用方法。