C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ const 常量用法

C++ const 常量完整用法详解

作者:C+++Python

在C++中,const关键字用于声明一个常量,即在编译时就已经确定其值的变量,使用const可以使代码更加健壮和易于理解,因为它可以防止某些类型的修改,从而提高代码的安全性,下面是一些关于如何在C++中使用const的完整用法和示例,

const 用于修饰只读对象,被修饰后值不可修改,有类型、作用域,是 C++ 主力常量用法。下面分场景逐一讲解。

一、基础:修饰普通变量(常量变量)

1. 基本语法

const 类型 变量名 = 初始值;

强制要求:必须初始化,定义后不能再赋值修改。

#include <iostream>
using namespace std;
int main()
{
    const int num = 100;
    const double pi = 3.14159;
    // num = 200;  // 编译报错:const 只读,无法修改
    cout << num << " " << pi << endl;
    return 0;
}

2. 作用域规则

// 文件A.cpp
extern const int g_val = 10;
// 文件B.cpp
extern const int g_val; // 声明,可使用

3. 用变量初始化 const

const 可以是运行时常量,允许用普通变量初始化:

int a = 20;
const int b = a; // 合法,运行时确定值

二、重点:const + 指针(三大组合,高频考点)

根据 const 位置不同,含义完全不同,分三类记忆。

1. 常量指针(const修饰指向的内容)

格式:const 类型* 指针名

int x = 1, y = 2;
const int* p = &x;
p = &y;        // ✅ 指针指向可以变
// *p = 100;   // ❌ 指向的值不能修改

2. 指针常量(const修饰指针本身)

格式:类型* const 指针名

int x = 1;
int* const p = &x; // 定义时必须初始化
*p = 100;      // ✅ 内容可改
// p = &y;     // ❌ 指针指向不能变

3. 双重 const(内容、指针都只读)

格式:const 类型* const 指针名

int x = 1;
const int* const p = &x;
// *p = 100;  ❌
// p = &y;    ❌

快速判断技巧:const 靠近谁,谁就不能改

三、const 修饰引用

引用本身等价于变量别名,const 修饰引用表示不能通过引用修改原数据
格式:const 类型& 引用名

int a = 10;
const int& r = a;

// r = 20;  // ❌ 不能通过引用修改 a
a = 20;    // ✅ 原变量本身可以修改

常用场景:函数传参,避免拷贝 + 保护数据。

四、const 修饰函数(分:参数、返回值、成员函数)

1. 修饰函数形参

目的:保护实参不被函数修改,推荐搭配引用/指针使用,减少拷贝。

// 不允许修改传入的字符串
void print(const string& s)
{
    cout << s << endl;
    // s = "test"; 报错
}

2. 修饰函数返回值

一般用于返回指针/引用,防止外部修改返回的内容:

const int& getVal(int& a)
{
    return a;
}
int main()
{
    int x = 10;
    const int& res = getVal(x);
    // res = 20; 报错
    return 0;
}

普通值返回加 const 无意义。

3. 修饰类的成员函数(类专属用法)

const 写在函数参数列表后面,表示:

该函数不会修改类的任何成员变量,也不能调用非 const 成员函数。

语法:

返回值 函数名(参数) const;

示例:

class Test
{
private:
    int num = 10;
public:
    // const 成员函数
    void show() const
    {
        cout << num << endl;
        // num = 20;  ❌ 不能修改成员变量
    }
};

规则:

  1. const 成员函数内,禁止修改成员变量
  2. const 对象只能调用 const 成员函数。
  3. const 成员函数不能调用普通(非 const)成员函数。

五、const 修饰类成员变量

类内 const 成员变量,必须在构造函数初始化列表初始化,不能在构造函数体内赋值。

class A
{
private:
    const int val; // const 成员
public:
    // 只能在初始化列表赋值
    A() : val(100) 
    {
        // val = 100;  ❌ 体内赋值报错
    }
};

六、补充:const 与 类型转换、const _cast

  1. const 变量不能直接转普通变量,强行修改属于未定义行为。
  2. 若临时需要去除只读属性,可用 const_cast(谨慎使用):
const int a = 10;
int* p = const_cast<int*>(&a);
*p = 20; // 不推荐,修改原 const 常量是未定义行为

七、const 总结速记

  1. 普通变量:const 类型 变量 = 值,只读不可改。
  2. 指针:
    • const T*:内容不可改,指针可改
    • T* const:指针不可改,内容可改
    • const T* const:全都不可改
  3. 引用:const T&,禁止通过引用改原数据。
  4. 函数参数:const 保护实参,优先引用传参。
  5. 类成员函数:尾部加 const,承诺不修改成员。
  6. 类 const 成员变量:必须在初始化列表初始化。

到此这篇关于C++ const 常量完整用法详解的文章就介绍到这了,更多相关C++ const 常量用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文