首页 > 编程语言 >C++_Const的相关知识点

C++_Const的相关知识点

时间:2024-08-05 21:27:54浏览次数:10  
标签:知识点 const 变量 只读 int C++ 修改 Const 指针

1. 修饰函数参数,表示函数不会修改参数

当 const 修饰函数参数时,表示函数内部不会修改该参数的值。这样做可以使代码更加安全,避免在函数内部无意中修改传入的参数值。

尤其是 引用 作为参数时,如果确定不会修改引用,那么一定要使用 const 引用。

void func(const int a) {
    // 编译错误,不能修改 a 的值
    a = 10;
}

2. 修饰函数返回值

当 const 修饰函数参数时,表示函数内部不会修改该参数的值。这样做可以使代码更加安全,避免在函数内部无意中修改传入的参数值。

尤其是 引用 作为参数时,如果确定不会修改引用,那么一定要使用 const 引用。

const int func() {
    int a = 10;
    return a;
}

int main() {
    const int b = func(); // b 的值为 10,不能被修改
    b = 20; // 编译错误,b 是只读变量,不能被修改
    return 0;
}

3. 修饰指针或引用

在 C/C++ 中,const 关键字可以用来修饰指针,用于声明指针本身为只读变量或者指向只读变量的指针。

根据 const 关键字的位置和类型,可以将 const 指针分为以下三种情况:

3.1. 指向只读变量的指针

这种情况下,const 关键字修饰的是指针所指向的变量,而不是指针本身。

因此,指针本身可以被修改(意思是指针可以指向新的变量),但是不能通过指针修改所指向的变量。

const int* p;  // 声明一个指向只读变量的指针,可以指向 int 类型的只读变量
int a = 10;
const int b = 20;
p = &a;  // 合法,指针可以指向普通变量
p = &b;  // 合法,指针可以指向只读变量
*p = 30;  // 非法,无法通过指针修改只读变量的值

在上面的例子中,我们使用 const int* 声明了一个指向只读变量的指针 p。

我们可以将指针指向普通变量或者只读变量,但是无法通过指针修改只读变量的值。

3.2. 只读指针

这种情况下,const 关键字修饰的是指针本身,使得指针本身成为只读变量。

因此,指针本身不能被修改(即指针一旦初始化就不能指向其它变量),但是可以通过指针修改所指向的变量。

int a = 10;
int b = 20;
int* const p = &a;  // 声明一个只读指针,指向 a
*p = 30;  // 合法,可以通过指针修改 a 的值
p = &b;  // 非法,无法修改只读指针的值

在上面的例子中,我们使用 int* const 声明了一个只读指针 p,指向变量 a。我们可以通过指针修改 a 的值,但是无法修改指针的值。

4.3. 只读指针指向只读变量

这种情况下,const 关键字同时修饰了指针本身和指针所指向的变量,使得指针本身和所指向的变量都成为只读变量。

因此,指针本身不能被修改,也不能通过指针修改所指向的变量。

const int a = 10;
const int* const p = &a;  // 声明一个只读指针,指向只读变量 a
*p = 20;  // 非法,无法通过指针修改只读变量的值
p = nullptr;  // 非法,无法修改只读指针的值

标签:知识点,const,变量,只读,int,C++,修改,Const,指针
From: https://blog.csdn.net/qq_39969848/article/details/140935535

相关文章

  • C++ exe程序内存占用分析
    编译 $gitclonehttps://github.com/google/bloaty$cdbloaty$cmake-Bbuild-GNinja-S.$cmake--buildbuild$cmake--buildbuild--targetinstall命令bloaty.exe --list-sourcesrmembersthe.ofilesina.afilecompileunitssourcefile......
  • 【C++ 面试 - 基础题】每日 3 题(一)
    ✍个人博客:Pandaconda-CSDN博客......
  • 【C++】实验十三
    题目:1、声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱)类。将类的定义部分分别作为3个头文件。对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来。形成一个完整的程序,并上机运行。2、教材第12章例12.3的......
  • L2-008 最长对称子串 C++
    对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定IsPAT&TAPsymmetric?,最长对称子串为sPAT&TAPs,于是你应该输出11。输入格式:输入在一行中给出长度不超过1000的非空字符串。输出格式:在一行中输出最长对称子串的长度。输入样例:IsPAT&TAPsymmetric?输出样......
  • 在python jupyter下运行cuda c++程序
    Installrunthisonjupyter(*.ipynb)files!pip3installnvcc4jupyterUsageloadtheextensiontoenablethemagiccommands:%load_extnvcc4jupyterRuncudatest%%cuda#include<stdio.h>__global__voidhello(){printf("Hellofromblock......
  • 在python jupyter下运行cuda c++程序
    Installrunthisonjupyter(*.ipynb)files!pip3installnvcc4jupyterUsageloadtheextensiontoenablethemagiccommands:%load_extnvcc4jupyterRuncudatest%%cuda#include<stdio.h>__global__voidhello(){printf("Hellofromblock......
  • 一些八股:1.fetch 的理解。2.let、const、var
    一、说说你对Fetch的理解,它有哪些优点和不足?FetchAPI是现代JavaScript中用于进行网络请求的接口,旨在替代传统的XMLHttpRequest。它提供了一种更简单、更灵活的方法来获取资源和与服务器进行交互。下面,我将详细介绍Fetch的优点和不足。Fetch的优点:语法简洁直观:Fetch......
  • C++类和对象
    文章目录C++类和对象类和对象1.类和对象的基本概念注意事项:2.类的定义和成员注意事项:3.构造函数和析构函数注意事项:4.访问控制和封装注意事项:5.this指针注意事项:6.静态成员注意事项:7.常量成员函数和常量对象注意事项:8.友元函数和友元类注意事项:9......
  • C++初学(11)
    不知不觉就第11篇了QWQ11.1、指针和自由存储空间之前提到了计算机程序在存储数据时必须跟踪的3个基本属性:(1)信息存储在何处;(2)存储的值为多少;(3)存储的信息时什么类型。之前我们通过定义一个简单变量,让声明语句指出了值的类型和符号名,让程序为值分配内存,还在内部跟踪该内存单......
  • emsdk安装和编译2个C++基础示例
    参考地址:Downloadandinstall—Emscripten3.1.65-git(dev)documentation 环境:ubuntu24.04LTSgcc(Ubuntu13.2.0-23ubuntu4)13.2.0g++(Ubuntu13.2.0-23ubuntu4)13.2.0cmakeversion3.28.3 Firstcheckthe Platform-specificnotes belowandinstallan......