C++中const的用法详细总结
const
是C++中的一个关键字,用于定义一个常量或声明一个不可修改的变量。它可以应用于变量、函数参数、函数返回值和类的成员函数等。在本文中,我们将详细总结const
的各种用法。
使用const定义变量
定义常量
const int MAX_COUNT = 100;
在上面的代码中,常量MAX_COUNT
被定义为一个不可修改的整数变量,其值为100。
定义指向常量的指针
const int* p = &MAX_COUNT;
在上面的代码中,指针p
被定义为一个指向MAX_COUNT
的常量整数指针。这意味着指针可以指向其他整数变量,但不能修改指向变量的值。
定义常量指针
int data = 10;
int* const ptr = &data;
在上面的代码中,指针ptr
被定义为一个指向整数变量data
的常量指针。这意味着指针不能指向其他变量,但可以修改指向变量的值。
使用const修饰函数参数
void print(const string& str)
{
// str不能被修改
cout << str << endl;
}
在上面的代码中,函数print
的参数str
被定义为一个不可修改的字符串引用。这意味着函数不能修改传入的参数。
使用const修饰函数返回值
const int getValue()
{
int value = 10;
// ...
return value;
}
在上面的代码中,函数getValue
的返回值被定义为一个不可修改的整数。这意味着返回的值不能在函数外部修改。
使用const修饰类的成员函数
class MyString
{
public:
// ...
const char& operator[](size_t pos) const
{
// 实现函数逻辑
}
char& operator[](size_t pos)
{
// 实现函数逻辑
}
// ...
};
在上面的代码中,类MyString
定义了两个下标运算符函数。其中,常量引用版本的下标运算符函数被声明为const
,因为该函数不会修改对象的状态。而非常量版本的下标运算符函数不包含const
关键字,因为它可能会修改对象的状态。
示例
示例1
#include <iostream>
using namespace std;
struct Rectangle
{
double length;
double width;
double area() const
{
return length * width;
}
};
int main()
{
const Rectangle rect = {3.5, 5.2};
cout << "Length: " << rect.length << endl;
cout << "Width: " << rect.width << endl;
cout << "Area: " << rect.area() << endl;
// rect.length = 4.2; // 编译错误,长度无法修改
// rect.width = 6.5; // 编译错误,宽度无法修改
// rect.area() = 18.2; // 编译错误,面积无法修改
return 0;
}
在上面的代码中,结构体Rectangle
定义了矩形的长度、宽度和面积。函数area
被声明为常量成员函数,因为该函数不会修改对象的状态。在main
函数中,结构体变量rect
被定义为一个不可修改的常量。由于rect
是一个常量,因此它的成员变量和成员函数都无法在函数中被修改。
示例2
#include <iostream>
using namespace std;
void printArray(const int arr[], const size_t arr_size)
{
for (size_t i = 0; i < arr_size; ++i)
{
cout << arr[i] << " ";
}
// arr[0] = 100; // 编译错误,对const数组的修改
}
int main()
{
const int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
printArray(arr, 10);
// arr[0] = 100; // 编译错误,对const数组的修改
return 0;
}
在上面的代码中,函数printArray
的两个参数都被声明为常量,以确保函数不会修改数组arr
和数组大小arr_size
。在main
函数中,数组arr
被定义为一个不可修改的常量。由于arr
是一个常量数组,因此它的元素无法在函数中被修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中const的用法详细总结 - Python技术站