讲师中心 微信公众号
AI工具推荐 视频效率加速

C++的const关键字怎么用?有什么作用?

胖明同学_5594

胖明同学_5594

发布时间:2025-06-09 23:21:06

|

840人浏览过

|

来源于php中文网

原创

const是c++中用于声明常量或不可修改对象的关键字,能提升代码可读性、安全性并辅助编译器优化。1. 声明常量变量时,如const int max_size = 100; 表示初始化后不可修改,适合配置参数和数组大小定义,且比宏定义更安全。2. 修饰指针时,const在左边表示内容不可变,如const int p1;在右边表示指针不可变,如int const p2;两者结合则均不可变。3. 成员函数加const如double getarea() const,表明不修改对象状态,允许const对象调用并增强可读性。4. 函数参数使用const引用如void printstring(const std::string& str),避免拷贝提升性能且保证数据不被修改。合理使用const有助于减少bug并提高代码清晰度。

C++的const关键字怎么用?有什么作用?

const 是 C++ 中一个非常实用的关键字,它的作用是声明“常量”或“不可修改的对象”。合理使用 const 可以提升代码的可读性和安全性,也能帮助编译器做优化。

下面从几个常见的使用场景来说明怎么用、有什么作用。


1. 声明常量变量

这是最基础的用法。当你希望某个变量在初始化后就不能再被修改时,就可以加上 const。

立即学习“C++免费学习笔记(深入)”;

const int max_size = 100;

这行代码声明了一个整型常量 max_size,之后不能再对它赋值。如果不小心写了:

max_size = 200; // 编译错误

编译器会报错,防止意外修改。这种写法特别适合定义配置参数、数组大小等不会变化的值。

小提示:C++ 中的 const 常量比宏定义(如 #define MAX_SIZE 100)更安全,因为它是有类型的,并且遵守作用域规则。

2. const 修饰指针和引用

指针相关的 const 容易让人混淆,但其实只要记住两个原则就能轻松掌握:

  • *const 在 左边**:表示指向的内容不能变
  • *const 在 右边**:表示指针本身不能变

比如:

int a = 10, b = 20;

const int* p1 = &a; // 内容不能改,p1可以指向其他地址
p1 = &b;            // OK
// *p1 = 30;        // 错误!内容不能改

int* const p2 = &a; // 指针不能换指向,但内容可以改
// p2 = &b;         // 错误!指针不能变
*p2 = 30;           // OK

const int* const p3 = &a; // 都不能变

这个规则在函数传参中也很常见,例如你想确保一个函数不修改传入的数据,可以这样写:

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
void printValue(const int* value) {
    std::cout << *value << std::endl;
}

这样调用者就知道你不会修改他们传进来的数据了。


3. const 成员函数

类中的成员函数如果不会修改对象的状态,应该加上 const 修饰符。

举个例子:

class Circle {
private:
    double radius;
public:
    double getArea() const {
        return 3.14159 * radius * radius;
    }
};

这里的 getArea() 是一个 const 成员函数,意味着它不会修改类的任何成员变量。如果你试图在里面修改 radius,编译器就会报错。

这样做的好处是:

  • 允许 const 对象调用这个函数
  • 明确表达函数的行为意图,增强可读性

另外,const 函数只能调用其他 const 函数,不能调用非 const 函数。


4. const 与函数参数传递

在函数参数中使用 const,尤其是配合引用时,可以避免不必要的拷贝,同时又保证原始数据不被修改。

比如:

void printString(const std::string& str) {
    std::cout << str << std::endl;
}

这里用了 const std::string&,说明:

  • 不需要拷贝整个字符串(性能好)
  • 不会修改传入的字符串(安全性高)

类似地,在传递复杂结构体或自定义类型时,这种写法很常见。


基本上就这些。
虽然 const 的用法看起来简单,但在实际编码中容易忽略一些细节,特别是指针和成员函数的用法。不过一旦熟练掌握,你会发现它能有效减少 bug,让代码更清晰、更安全。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6659

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6144

2023.10.24

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

313

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

619

2023.10.11

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2278

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1798

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2804

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6144

2023.10.24

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn