首页 > 编程语言 >C++ const关键字(八股总结)

C++ const关键字(八股总结)

时间:2025-01-08 12:30:26浏览次数:3  
标签:const 常量 int 函数 C++ 关键字 ptr 指针

作用

const修饰符用来定义常量,具有不可变性。

  1. 修饰变量,说明该变量不可以被改变;
  2. 修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);
  3. 修饰引用,指向常量的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改;
  4. 修饰成员函数,说明该成员函数内不能修改成员变量。

指针常量和常量指针?

指针常量指的是该指针本身是一个常量,不能被修改,但是指针指向的对象可以被修改。

int a = 10;
int b = 20;
int* const ptr = &a; // 指针常量
*ptr = 15;           // 可以修改 a 的值
ptr = &b;            // 错误:ptr 是指针常量,不能改变指

常量指针指的是这个指针指向的对象是一个常量,不能被修改,但是指针本身可以被修改。

int a = 10;
int b = 20;
const int* ptr = &a; // ptr 指向 a
*ptr = 15;           // 错误:不能修改所指向的值
ptr = &b;            // 可以改变 ptr 的指向
类型指针是否可变指向的值是否可变定义方式
指针常量int* const ptr = &a;
常量指针const int* ptr = &a;

const修饰的函数能否重载?

onst修饰的函数可以重载。

const 修饰的成员函数与非 const 修饰的成员函数被视为不同的函数签名。编译器会根据调用时对象的 const 性来决定调用哪个版本的函数。

  • const 对象:无论是否是const成员函数都能调用,但是如果有重载的非const函数,非const对象会优先调用重载后的非const函数。
  • const 对象:只能调用 const 修饰的成员函数,也无法调用非const的成员函数;

示例代码

#include <iostream>
using namespace std;

class MyClass {
public:
    void display() {
        cout << "Non-const display()" << endl;
    }

    void display() const {
        cout << "Const display()" << endl;
    }
};

int main() {
    MyClass obj;          // 非 const 对象
    const MyClass constObj; // const 对象

    obj.display();        // 调用非 const 版本
    constObj.display();   // 调用 const 版本

    return 0;
}

输出:

Non-const display()
Const display()

宏定义 #define 和 const 常量 区别

宏定义 #defineconst 常量
宏定义,相当于字符替换常量声明
预处理器处理编译器处理
无类型安全检查有类型安全检查
不分配内存要分配内存
存储在代码段存储在数据段
可通过 #undef 取消不可取消

标签:const,常量,int,函数,C++,关键字,ptr,指针
From: https://blog.csdn.net/xiaolan7777777/article/details/144974410

相关文章

  • 在C#中,如果声明字段时不加关键字volatile,会影响多线程环境中对该字段的访问吗?
    今天再一次在别人的代码里看到volatile,以前见过,平时用的少,忘记具体的含义了,所以问了一下百度的文心一言,感觉回答的不错。记录一下。下面是回答的内容。在C#中,如果你声明一个字段时不加volatile关键字,并且这个字段在多线程环境中被访问,那么确实可能会影响其行为和结果。首先,不加......
  • 启航数据结构算法之绮旅,漫步C++智慧之道——LeetCode题海探幽:轮转数组之多元策略演绎
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录复杂度练习之轮转数组方法1方法2方法3总结复杂度练习之轮转数组题目链接:轮转数组为什么我们把这道题作为复杂度的练习题呢?是因为我们以后做题都会涉及到复杂度的计算,我们要保证我们写的程序不会超出题目的时间......
  • 10.28软件设计——抽象工厂模式之人与肤色 c++
    1、类图 2、源代码 test4.cpp  #include<iostream>#include<string>usingnamespacestd; //抽象产品类男人classMan{public: virtualvoidmakeM()=0;};//具体产品类白色男人classWhiteMan:publicMan{public: voidmakeM() { cout......
  • 【Java从入门到放弃 之 final 关键字】
    final关键字final关键字final字段final函数列表中的参数final方法final类final关键字Java中里面有final这个关键字,这个关键字总体上是用来表达”不能被改变“这个意思的。我们使用这个关键字表达不能被改变,有两种使用场景,有三个使用位置。使用场景设计上......
  • 1.3.1 C++新特性
    文章目录1.3.1C++新特性1.智能指针1.为什么要用智能指针2.三种智能指针对比3.shared_ptr1.使用智能指针可以自动释放占用的内存2.共享所有权指针的传播和释放3.常用函数4.要注意的问题4.unique_ptr5.weak_ptr弱引用的智能指针1.基本用法2.weak_ptr返回this指......
  • C++STL<unordered_map>
    在C++中,<unordered_map>是一种基于哈希表的关联容器,它存储键值对,并且不保证元素的排序。以下是unordered_map的一些常用函数及其使用方式:插入元素:insert(constvalue_type&val)或insert(initializer_listinit)用于插入元素。std::unordered_map<int,std::string......
  • C++头文件map
    在C++中,<map>头文件提供了一种关联容器,它存储的是键值对(std::pair),并且会自动根据键进行排序。以下是一些常用的map函数及其使用方式:插入元素:insert(constvalue_type&val)或insert(initializer_listinit)用于插入元素。std::map<int,std::string>myMap;myMap.......
  • C++编程基础:类型转换四式速记const_cast,dynamic_cast,reinterpret_cast,static_cast
    C++编程就应该使用C++风格的转换,不要再使用不安全的C风格的转换方法了。这里先给一个C++编程风格的类型转换四式速记打油诗,帮大家记忆其用法:C++强制转换妙,四类各有其诀窍。const_cast用途巧,常量限制可取消,const属性轻松搞,函数参数常需要。dynamic_cast专长显,继承体系......
  • docker启动nacos报错: Nacos Server did not start because dumpservice bean constru
    一、docker启动nacos报错:mysql版本:8nacos版本:2.xNacosServerdidnotstartbecausedumpservicebeanconstructionfailure:NoDataSourcesetNacosisstarting,youcandockerlogsyourcontainer+exec/opt/java/openjdk/bin/java-XX:+UseConcMarkSweepGC-XX:+U......
  • 在 C++ 中优雅地处理 JSON:nlohmann/json 库实践指南
    JSON(JavaScriptObjectNotation)作为一种轻量级的数据交换格式,在现代软件开发中扮演着重要角色。在C++开发中,nlohmann/json库因其易用性和灵活性而广受欢迎。本文将通过实例介绍如何使用这个强大的库进行JSON数据的序列化和反序列化操作。环境准备首先,我们需要配置项目......