首页 > 其他分享 >const关键字

const关键字

时间:2024-10-15 23:12:55浏览次数:7  
标签:const 常量 修改 int 关键字 ptr 指针

在C++中,const关键字用于声明常量、保护变量不被修改、限制函数行为等。它是用于提升代码安全性和可维护性的一个重要特性。以下是const关键字在不同场景中的使用方式及其作用:

1. 定义常量

const关键字可以用来定义不可修改的常量。在这种情况下,常量的值在初始化时被设置,并且不能在后续的代码中改变。

示例:

const int MAX_SIZE = 100;  // MAX_SIZE 是一个常量,不能被修改

int main() {
    // MAX_SIZE = 200;  // 错误!常量不能修改
    std::cout << "Max size is: " << MAX_SIZE << std::endl;
    return 0;
}

用途

  • 提供一个具名的常量,使代码更具可读性。
  • 防止意外修改常量值,增加安全性。

2. 指针和const

在指针和const的组合中,const可以用来保护指针指向的值,或者保护指针本身,甚至两者都可以受保护。

(1)指向常量的指针

指针指向的值是常量,不能通过该指针修改它指向的值。

const int val = 10;
const int* ptr = &val;  // ptr 是一个指向 const int 的指针

// *ptr = 20;  // 错误!不能通过 ptr 修改 val 的值

(2)常量指针

指针本身是常量,不能指向其他地址,但可以修改指针指向的值。

int val1 = 10;
int val2 = 20;
int* const ptr = &val1;  // ptr 是一个常量指针,不能改变指向

*ptr = 30;  // 可以修改 val1 的值
// ptr = &val2;  // 错误!ptr 不能改变指向

(3)指向常量的常量指针

指针和它指向的值都是常量,既不能改变指针指向的值,也不能改变指针本身。

const int val = 10;
const int* const ptr = &val;  // 指针和它指向的值都是常量

// *ptr = 20;  // 错误!不能修改指针指向的值
// ptr = &val2;  // 错误!不能修改指针本身

3. 常量引用

使用const关键字可以创建一个常量引用。常量引用在函数参数传递中非常常见,用于防止函数修改传入的对象,并且避免对象的拷贝。

示例:

void print(const std::string& str) {
    std::cout << str << std::endl;
    // str += " added";  // 错误!不能修改 const 引用的值
}

int main() {
    std::string message = "Hello, World!";
    print(message);
    return 0;
}

用途

  • 通过引用传递对象,避免拷贝的开销。
  • 使用const保证函数不会修改传入的参数。

4. 常量成员函数

在类中,const关键字可以用来修饰成员函数,表示该函数不会修改类的成员变量。常量成员函数只能调用其他常量成员函数。

示例:

class MyClass {
private:
    int value;
public:
    MyClass(int v) : value(v) {}

    int getValue() const {  // 常量成员函数
        return value;
    }

    void setValue(int v) {
        value = v;
    }
};

int main() {
    MyClass obj(10);
    std::cout << obj.getValue() << std::endl;  // 常量函数可以调用
    obj.setValue(20);  // 可以修改值
    return 0;
}

在常量成员函数中,编译器会确保函数不会修改任何非mutable的成员变量,从而保证对象的状态不变。

5. 常量对象

通过const关键字,可以创建一个常量对象,表示该对象的所有成员变量和成员函数都不能修改(除非函数是mutable的或是常量成员函数)。

示例:

class MyClass {
private:
    int value;
public:
    MyClass(int v) : value(v) {}

    int getValue() const {
        return value;
    }

    void setValue(int v) {
        value = v;
    }
};

int main() {
    const MyClass obj(10);  // 常量对象
    std::cout << obj.getValue() << std::endl;  // 可以调用常量成员函数
    // obj.setValue(20);  // 错误!不能调用非常量成员函数
    return 0;
}

用途

  • 确保对象在其生命周期中不被修改。
  • 只能调用对象的常量成员函数,从而保证数据的安全性。

6. 常量数组

可以用const关键字定义常量数组,数组中的元素值不能被修改。

示例:

const int arr[] = {1, 2, 3, 4, 5};  // 常量数组

int main() {
    // arr[0] = 10;  // 错误!不能修改常量数组的值
    for (int i = 0; i < 5; ++i) {
        std::cout << arr[i] << std::endl;
    }
    return 0;
}

总结

  • 定义常量const int MAX = 10; 确保常量不被修改。
  • 常量指针int* const ptr; 限制指针的修改。
  • 指向常量的指针const int* ptr; 防止通过指针修改值。
  • 常量引用const std::string& ref; 用于引用传递,保证不修改值。
  • 常量成员函数int getValue() const; 防止修改类的成员变量。

使用const可以提升代码的可读性和安全性,防止意外的修改,同时也增强了代码的健壮性和可维护性。

标签:const,常量,修改,int,关键字,ptr,指针
From: https://www.cnblogs.com/chentiao/p/18468742

相关文章

  • sqlserver 里的UNION 关键字是啥含义
    在SQLServer中,UNION是一种用于合并两个或多个SELECT语句结果集的操作符。它允许你将来自不同表或相同表但基于不同条件的查询结果合并成一个单独的结果集。使用UNION时,需要注意以下几点:列数和数据类型:所有SELECT语句必须返回相同数量的列,并且相应列的数据类型必须兼......
  • springboot~ConstraintValidatorContext验证两个字段内容相同
    场景我在开发修改密码功能,通过原密码和新密码及确认新密码,希望通过ConstraintValidator这个方式来校验新密码和确认新密码,规则是这两个密码需要是相同的。参考文档https://github.com/micronaut-projects/micronaut-core/issues/3243https://stackoverflow.com/questions/377......
  • python中global关键字的作用
    python中global关键字的作用python中初始化一个变量y_axis_RA=[]一个函数中给y_axis_RA赋值,但是该变量显示未使用,在另外一个函数中使用y_axis_RA提示变量为空在Python中,变量作用域的问题可能会导致你遇到的情况。如果你在函数外部初始化了一个变量y_axis_RA=[],然后在函数......
  • Android中的ConstrainLayout的用法(上)
    Android中的ConstraintLayout(约束布局)是一种灵活的布局方式,它允许开发者通过定义视图之间的相对位置来创建复杂的用户界面。以下是对ConstraintLayout的详细解释:一、基本介绍ConstraintLayout是在2016年GoogleI/O大会上发布的布局方式,旨在解决复杂的页面层级嵌套过多的问题......
  • DRÆM – A discriminatively trained reconstruction embedding for surface anomaly
    异常检测目的:检测与正常外观显著偏离的局部图像区域。近期异常检测方法缺点:1.缺点1:重建异常区域失败近期的异常检测方法通过生成模型来重建图像,在正常区域里成功,但异常区域里重建失败缺点2:阻碍优化特征提取因为这些方法只在无异常的图像上训练,且通过人工的方式定位......
  • static关键字
    staticint 是C和C++中的一种声明方式,用于定义具有静态存储持续时间的整数变量。static 关键字在不同上下文中有不同的含义,但通常它用于控制变量的生存期和可见性。下面详细解释 staticint 的含义和用途。1. 静态存储持续时间生存期:当变量被声明为 static 时,它的生......
  • 网站关键字标签的作用与优化策略
    网站关键字标签是搜索引擎优化(SEO)的重要组成部分。关键字标签可以帮助搜索引擎理解网站内容,并将合适的用户引导到网站。本文将介绍关键字标签的作用以及如何优化它们。1.关键字标签的作用关键字标签是网站HTML页面中用于描述页面内容的简短文本。这些标签告诉搜索引擎关于......
  • C++之multimap:关键字分类的利器
    目录1.引言2.主要特点3.成员函数4.使用实例 5.注意事项1.引言        在C++中,multimap是标准模板库(STL)中的一个关联容器,它存储键值对(key-valuepairs),并且允许键的重复。multimap内部通常通过红黑树(或其他平衡二叉搜索树)实现,这保证了元素按照键的顺序进行存储......
  • GS-LRM: Large Reconstruction Modelfor 3D Gaussian Splatting 论文解读
    目录一、概述二、相关工作1、多视图的三维重建2、前馈重建三、LRM1、编码器2、解码器3、NeRF渲染四、GS-LRM 1、输入处理2、Transformer3、损失函数五、实验六、局限一、概述    该论文提出了一种利用稀疏输入图像高效预测3D高斯原语的方法,也是第一......
  • 【C语言基础】核心关键字详解与应用
    目录一、void1.1.作用1.2.代码示例二、基本数据类型(char、int、float、double等)2.1.char(字符类型)2.2.int(整型)2.3.float(单精度浮点型)2.4.double(双精度浮点型)2.5.代码示例三、控制流程语句(if、else、switch、case、default等)3.1.if和else语句3.2.switch......