C++关键字:const

文章目录

    • 一、const的四大作用
      • [1.修饰 变量、数组](#1.修饰 变量、数组)
      • [2.修饰 函数的形参、修饰 引用 (最常用)](#2.修饰 函数的形参、修饰 引用 (最常用))
      • [3.修饰 指针:常量指针、指针常量 、只读指针](#3.修饰 指针:常量指针、指针常量 、只读指针)
      • [4.修饰 类的成员函数、修饰 类的对象](#4.修饰 类的成员函数、修饰 类的对象)

一、const的四大作用

1.修饰 变量、数组

1.const修饰变量:

被const修饰的变量,成为只读常量 ,防止误修改。

const修饰变量,该变量的值在初始化后就不会再被改变。若强行修改,则编译器会报错。

cpp 复制代码
const int N = 1001; //算法题常用
cpp 复制代码
const int a = 10;
const float b = 3.14;
const char c = 'A';

a = 11; //报错
b = 3.15; //报错
c = 'B'; //报错

2.const修饰数组:

const修饰数组,则数组中元素的值在初始化后不可被修改。

cpp 复制代码
const int a[] = {1,2,3};
//a[0] = 10;  //错误

2.修饰 函数的形参、修饰 引用 (最常用)

1.const修饰 函数的形参:

可以避免传递过来的值,在函数体内部被误修改。

cpp 复制代码
void printString(const char* str){  //等价于const char str[]
	cout << "String:" << str << endl;
}

2.const 修饰 引用 (最常用):

引用避免了拷贝、const避免了函数对值的修改。

明确告诉函数的使用者,该参数在经过函数调用时不会被修改,提高了代码的清晰度和安全性。

cpp 复制代码
void setName(string name){ //应优化为 const string &name
	m_name = name;
}
cpp 复制代码
void printName(const string &name) {
    cout << "Name: " << name << endl;
    // name = "Sam"; // 错误:不能修改const引用指向的值
}

3.修饰 指针:常量指针、指针常量 、只读指针

1.常量指针:

const 先碰到 *,表示 变量的值不可修改 const int * ptr

指针的指向可以改变,指针指向的值不可修改。指针只能指向常量。

cpp 复制代码
int a = 1, b = 1;
const int * ptr1 = &a;
ptr1 = &b;  //指针的指向可以修改
//*p1 = 10; //错误:常量指针,指针指向的值不可修改

2.指针常量:

const 先碰到指针,表示 指针不可修改 int * const ptr

指针是个常量,指针的指向不可修改,但是指向的变量的值可以改变

cpp 复制代码
int a = 1, b = 1;
int * const ptr2 = &a;
//ptr2 = &b;  //错误:指针常量,指针指向不可修改
*ptr2 = 10;

3.只读指针:

两个const,表示 变量的值和指针都不可修改 const int * const ptr

cpp 复制代码
int a = 1, b = 1;
const int * const ptr3 = &a;
//ptr3 = &b; //错误:只读指针,指针的指向不可改变
//*p3 = 10;  //错误:只读指针,指针指向的值不可修改

4.修饰 类的成员函数、修饰 类的对象

1.const 修饰 类的成员函数:
常成员函数 不会修改任何成员变量

成员函数后面加const,则该成员函数不可修改类的成员变量。除非成员变量前面加了关键字mutable

cpp 复制代码
void test(int x) const;
cpp 复制代码
#include <iostream>

class Test {
public:
    int x;
    mutable int y;  // 可以在const成员函数中被修改

    Test(int val):x(val),y(0){
    	//使用初始化列表,直接对成员变量初始化
    } 

    void modify() const {  // const成员函数
        // x++;  // 错误:不能在const成员函数中修改非mutable成员
        y++;  // 正确:可以修改mutable成员
    }
};

int main() {
    Test t(10);
    t.modify();
    std::cout << "t.y = " << t.y << std::endl;  // 输出 t.y = 1
    return 0;
}

2.const 修饰 类的对象:
常对象 只能调用 常成员函数

被const修饰的对象,只能调用类中 结尾带const的成员函数。

cpp 复制代码
const People p;
相关推荐
mit6.8241 小时前
并查集|栈
c++
中国胖子风清扬1 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust
岁忧2 小时前
(LeetCode 面试经典 150 题) 200. 岛屿数量(深度优先搜索dfs || 广度优先搜索bfs)
java·c++·leetcode·面试·go·深度优先
一枝小雨2 小时前
【OJ】C++ vector类OJ题
数据结构·c++·算法·leetcode·oj题
一枝小雨2 小时前
【C++】Vector完全指南:动态数组高效使用
开发语言·c++·笔记·vector·学习笔记·std库
buyutang_2 小时前
C/C++ Linux系统编程:线程控制详解,从线程创建到线程终止
linux·c语言·c++·学习
Qiang_san3 小时前
GNU Make | C/C++项目自动构建入门
c语言·c++·gnu
源代码•宸3 小时前
Leetcode—2749. 得到整数零需要执行的最少操作数【中等】(__builtin_popcountl)
c++·经验分享·算法·leetcode·位运算
芒果敲代码3 小时前
单一职责原则(SRP)
c++·单一职责原则
ComputerInBook4 小时前
C++编程语言:标准库:第37章——正则表达式(Bjarne Stroustrup)
开发语言·c++·正则表达式