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

📅  最后修改于: 2023-12-03 15:29:42.187000             🧑  作者: Mango

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

1. 什么是const关键字?

const是C++语言中的一个关键字,用于定义常量。常量是指在程序运行期间不会被修改的值,在程序中起到了一定的保护作用,防止被意外修改。const关键字可以用于标记变量、函数参数和函数返回值等。

在定义常量时,可以使用以下两种方式:

// 使用const关键字
const int a = 10;

// 使用#define宏定义
#define b 20

其中,const关键字定义的常量的值是不可修改的,而宏定义则是直接替换为常量值,也是不可修改的。

2. const变量和非const变量有什么区别?

const变量和非const变量的区别在于const变量的值不能被修改,而非const变量的值可以被修改。对于非const变量,可以直接赋值修改其值;而对于const变量,在编译时即确定了其值,无法修改。

int a = 10; // 定义非const变量a
const int b = 20; // 定义const变量b

a = 15; // 可以修改a的值为15
b = 25; // 不允许修改const变量b的值,编译错误

const变量在程序中起到了一定的保护作用,防止被意外修改;而非const变量更具有灵活性,可以根据需要在程序运行期间修改其值。

3. const指针和指针常量有什么区别?

const指针和指针常量的区别在于指针的指向和指针所指向的值是否可被修改。对于const指针,指针本身不可被修改,但指向的值可以被修改;而对于指针常量,指向的值不可被修改,但指针本身可以被修改。

int a = 10;
int b = 20;

int* const p1 = &a; // 定义指针常量p1,指向a
const int* p2 = &b; // 定义const指针p2,指向b

*p1 = 15; // 可以修改p1指向的值为15
p1 = &b; // 不允许修改指针常量p1的指向,编译错误

*p2 = 25; // 不允许修改const指针p2指向的值,编译错误
p2 = &a; // 可以修改const指针p2的指向为a的地址
4. const函数和非const函数有什么区别?

const函数和非const函数的区别在于是否能修改类的属性成员。对于const函数,不允许修改类的属性成员,即使是非const属性成员;而对于非const函数,可以修改类的属性成员。

class Test {
public:
    int a;
    void func() {
        a = 10; // 可以修改a的值为10
    }
    void func() const {
        a = 20; // 不允许修改a的值,编译错误
    }
};

Test t1;
t1.func(); // 调用非const函数,可以修改t1的a属性成员

const Test t2;
t2.func(); // 调用const函数,不允许修改t2的a属性成员,编译错误
5. 总结

const关键字是C++语言中用于定义常量的关键字,可以用于标记变量、函数参数和函数返回值等。const变量和非const变量的区别在于const变量的值不能被修改,而非const变量的值可以被修改;const指针和指针常量的区别在于指针的指向和指针所指向的值是否可被修改;const函数和非const函数的区别在于是否能修改类的属性成员。在程序中使用const关键字可以有效地保护程序中的常量、指针和函数不被意外修改,从而增加程序的健壮性和安全性。