C++ const修饰符

简介: C++ const修饰符


const修饰符

常量修饰符,用来限定特定变量,通知编译器该变量不可以修改。使用const修饰符可以避免在函数中对某些不应修改的变量造成可能的改动。

const的使用

1. const修饰常量

对于基本的数据类型,修饰符可以在类型说明前面,可以在后面。

const int a = 100;
int const b = 200;
const int arr[2] = {1,2};

2. const修饰指针

const修饰指针,分为两种情况,常量指针与常量的指针

  • 常量的指针(const数据),不可以修改指针指向的地址的值,但是可以改指针的指向。
  • 常量指针(const指针),可以修改指针指向的地址的值,但是不可以修改指针的指向。
// const 数据
const char * p = "hello";
// const 指针
char * const q = "world";
// const 指针 + const 数据
const char * const pq = "!!!!";

3. const修饰函数

const可以修饰函数的参数、返回值以及类型的成员函数。

3.1 const修饰函数参数

const只能修饰输入作用的参数,修饰输出作用的参数没有意义。

修饰函数形参则在函数体内不能修改形参的值。

3.2 const修饰函数返回值

如果返回值为指针,加上const修饰后,内容是不可以修改的。

同时,接收变量也必须是const修饰的。

3.3 const修饰类成员函数

const修饰成员函数是为了保护成员变量,要求const函数不能修改成员变量,否则编译不通过。

函数体内不能修改成员变量的值,增加程序的健壮性。

只有成员函数才可以在后面加const,普通函数后加const无意义。

const修饰成员函数的规则

  • const对象只能访问const成员函数(因为非const成员函数可能会修改成员变量),非const的对象可以访问任何成员函数,包括const成员函数。
  • 函数名、参数、返回值都相同的const成员函数和非const成员函数是可以构成重载的。
    const对象调用const成员函数,非const对象默认调用非const的成员函数。
  • const成员函数可以访问所有成员变量(但是不能修改),但是只能访问const的成员函数。
  • 非const成员函数,可以访问任何成员,包括const成员函数。
  • const成员函数不能修改任何的成员变量,除非变量用mutable修饰。
  • 静态成员函数不可以被const修饰。const修饰成员函数实质上是对this指针进行限制,静态成员函数中没有this指针。
#include <iostream >
using namespace std;
class myclass{        
private:
        int a;
        mutable int b;
public:        
        myclass(){
                a = 1;
                b = 2;
        }
        void print() const {
                int c = 1;
                // 非成员变量可以修改 
                c += 1;
                // mutable 修饰的成员变量可以修改 
                b += 2;
                
                // 成员变量不可以修改 
                cout << "a:" << a << endl;
                cout << "b:" << b << endl;
                cout << "c:" << c << endl;        
        }
};
int main(){
        myclass mc;
        mc.print();
        return 0;
        
}

4 . const修饰类对象

const修饰的类对象的任何成员都不能被修改,const类对象只能调用const成员函数。

相关文章
|
1天前
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
11 0
|
7月前
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
92 2
|
7月前
|
编译器 C++
C++中的内联函数与const限定词的使用
C++中的内联函数与const限定词的使用
47 1
|
6月前
|
编译器 C++
【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 )
本文探讨了C++中类的成员函数,特别是取地址及const取地址操作符重载,通常无需重载,但展示了如何自定义以适应特定需求。接着讨论了构造函数的重要性,尤其是使用初始化列表来高效地初始化类的成员,包括对象成员、引用和const成员。初始化列表确保在对象创建时正确赋值,并遵循特定的执行顺序。
|
7月前
|
存储 编译器 程序员
c++修饰符类型
c++修饰符类型
52 1
|
6月前
|
编译器 C++
【C++】:const成员,取地址及const取地址操作符重载
【C++】:const成员,取地址及const取地址操作符重载
49 0
|
7月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(下)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
27 1
|
7月前
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
52 2
|
7月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(中)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
27 0
|
7月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(上)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
23 0