C++ Const的作用

在C++中,const关键字是一个类型修饰符,用于声明一个对象或变量的值是不可变的。它提供了多种方式来确保数据的完整性和安全性。以下是const的主要用途和好处:

1.定义常量:

const可以用于定义常量,这些常量的值在初始化后就不能再改变。

cpp 复制代码
const int kNumberOfElements = 10;

2.指向常量的指针:

const可以用来修饰指针,使其指向的值不可改变。

cpp 复制代码
const int* ptr = &kNumberOfElements;  
// *ptr = 5; // 错误,因为ptr指向的值是常量

3.常量指针

一个指针自身可以是常量,这意味着它指向的地址不能改变,但指向的值可以变。

cpp 复制代码
int value = 10;  
int* const constPtr = &value;  
// constPtr = &anotherValue; // 错误,因为constPtr是常量  
*constPtr = 20; // 正确,可以修改constPtr指向的值

4.指向常量的常量指针

指针自身和其指向的值都可以是常量。

cpp 复制代码
const int constantValue = 10;  
const int* const ptrToConstant = &constantValue;  
// *ptrToConstant = 20; // 错误,因为ptrToConstant指向的值是常量  
// ptrToConstant = &anotherValue; // 错误,因为ptrToConstant是常量

5.函数参数

使用const修饰函数参数可以确保函数不会修改该参数的值。

cpp 复制代码
void displayValue(const int& value) {  
    // ... 不能修改value的值 ...  
}

6.类成员函数

如果一个成员函数不会修改类的任何成员变量,它可以被声明为const

cpp 复制代码
class MyClass {  
public:  
    int getValue() const {  
        return value_;  
    }  
private:  
    int value_;  
};

这有助于在编程时保证数据的一致性和完整性,因为当你尝试在const成员函数内部修改任何成员变量时,编译器会报错。

7.类成员变量

类的成员变量也可以被声明为const,这意味着它们只能在初始化列表中被赋值一次。

cpp 复制代码
class MyClass {  
public:  
    MyClass(int val) : constValue_(val) {}  
    int getConstValue() const { return constValue_; }  
private:  
    const int constValue_;  
};

8.全局或静态变量

如果全局或静态变量在整个程序中都应该保持不变,那么可以将其声明为const

const不仅增强了代码的可读性和可维护性,而且在某些情况下,它还能帮助编译器进行优化,因为它告诉编译器某些值在程序执行期间不会改变。此外,使用const也是现代C++编程中良好实践的一部分,有助于编写更加健壮和安全的代码。

相关推荐
朱嘉鼎1 小时前
C语言之可变参函数
c语言·开发语言
SunkingYang1 小时前
详细介绍C++中捕获异常类型的方式有哪些,分别用于哪些情形,哪些异常捕获可用于通过OLE操作excel异常
c++·excel·mfc·异常捕获·comerror
北冥湖畔的燕雀4 小时前
C++泛型编程(函数模板以及类模板)
开发语言·c++
QX_hao5 小时前
【Go】--map和struct数据类型
开发语言·后端·golang
你好,我叫C小白5 小时前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
Evand J7 小时前
【MATLAB例程】基于USBL和DVL的线性回归误差补偿,对USBL和DVL导航数据进行相互补偿,提高定位精度,附代码下载链接
开发语言·matlab·线性回归·水下定位·usbl·dvl
Larry_Yanan8 小时前
QML学习笔记(四十二)QML的MessageDialog
c++·笔记·qt·学习·ui
爱喝白开水a8 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
Neverfadeaway8 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
武子康8 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql