const与static区别

news/2024/7/7 20:52:57

const与static的主要区别在于它们修饰的对象的行为和属性。

  • const 用于声明一个值不能被修改的常量。它主要用于定义常量、修饰指针、函数的输入参数和返回值,以确保这些值在程序运行期间保持不变。const修饰的变量或对象具有不可变性,这有助于提高程序的安全性和可靠性。const还可以用于避免意义模糊的数字出现,方便进行参数的调整和修改,同时提高代码的效率和可读性。常量的地址不同

  • static 用于修饰变量、函数或类成员,以改变它们的存储方式、作用域或生命周期。当static修饰变量时,该变量具有静态存储期,即在整个程序运行期间都存在,而不是在函数调用时分配和释放内存。static修饰的变量可以在函数内部使用,但作用域仅限于定义该变量的文件内。对于函数,static可以限制函数的可见性,使其成为静态函数,只能在定义它的文件中使用。此外,static还可以用于修饰类的成员函数或成员变量,以实现一些特定的功能,如单例模式或共享数据。静态地址相同

静态变量:

        对于C++,除了C语言中的功能外,在类内的数据成员也可以被定义为static,在这种情况下,该数据成员就是类的静态数据成员,静态数据成员有以下特点:

        1.对于非静态数据成员,每个对象都有自己单独的一个副本。而静态数据成员被当作是类的成员,只会存在唯一的副本,且被所有对象共享。

        2.静态成员变量属于类而不属于对象。也就是说,即使没有实例化的对象,也可以使用静态变量,通常通过“类名::静态成员变量”来访问。

       3. 静态数据成员和普通数据成员一样遵从public、protected、private访问规则

       4.static成员变量的初始化是在类外,初始化的时候不需要再使用static关键字。被private或protected修饰的static成员虽然可以在类外初始化,但是不能在类外被访问。

静态函数:

        1.在类中,被static修饰的函数是类的静态成员函数,静态成员函数也属于类,而不属于某一个特定对象,被所有对象共享。因此,它没有this指针。从这个意义上讲,类的静态成员函数无法访问对象成员,也无法访问普通成员函数,它只能访问静态成员函数或静态成员变量

        2.静态函数不要求创建对象来调用, 静态函数可以在类的外部直接调用。访问方法是类名::函数名。

常量:

         在C++中,常量是一个固定的值,它在程序执行期间不会发生改变。

常函数:

        1.常函数(常成员函数)(const member function)是指在函数声明和定义中使用 const 关键字修饰的成员函数。常函数承诺不会修改对象的任何成员变量,它只能读取成员变量的值,但不能修改它们。这样可以确保在常对象上调用常函数时,对象的状态不会发生变化。

        2.常函数只能去读成员的数据,不能修改成员的值,常函数不能调用普通的函数,只能调用常函数;

常对象:

        1.常对象(常量对象)(Constant object)是指通过使用 const 关键字修饰的对象。常对象的值在创建后不能被修改,它的成员变量和成员函数都被视为常量,并且只能调用常函数。

        2.如果想改某个变量的值,可以给某个变量加上 mutable关键字,表示这个变量是可变的。


http://lihuaxi.xjx100.cn/news/2215555.html

相关文章

SolarLab - hackthebox

简介 靶机名称:SolarLab 难度:中等 靶场地址:https://app.hackthebox.com/machines/SolarLab 本地环境 靶机IP :10.10.11.16 ubuntu渗透机IP(ubuntu 22.04):10.10.16.17 windows渗透机IP(windows11&…

PTCMS小说聚合网站系统源码(带会员收费机制)

源码介绍 源码内有详细搭建方法,图文的,还是很简单的。新版UI,添加原创专区,新闻发布,书单发布,采集日志,百度推送,神马推送,推送日志功能。 前端高仿起点小说网&#x…

【机器学习】基于NeRF的3D动画渲染

1.引言 1.1.NeRF框架简介 1.1.1. 什么是NeRF框架 NeRF框架,全称为神经辐射场(Neural Radiance Fields)框架,是一个基于深度学习的三维场景重建和渲染技术。 基本概念: NeRF利用全连接神经网络(又称多层…

SpringCloud总结(springcloud alibaba)

目录 版本说明(很重要) springcloud alibaba对应组件版本说明 简述 spring cloud albaba 几大模块 周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃 spring cloud alibaba官网 注册配置中心 简单介绍 nacos 步骤 示例代码 依赖…

HCIA11 网络安全之本地 AAA 配置实验

AAA 提供 Authentication(认证)、Authorization(授权)和 Accounting(计费)三种安全功能。 • 认证:验证用户是否可以获得网络访问权。 • 授权:授权用户可以使用哪些服务。 •…

Android 工程副总裁卸任

Android 工程副总裁卸任 Android工程副总裁Dave Burke宣布,他将辞去领导Android工程的职位,将重心转向“AI/生物”项目。不过,他并没有离开Alphabet,目前仍将担任Android系统开发顾问的角色。 Burke参与了Android系统的多个关键…

1、C++编程中的基本运算 - 课件

一、基础知识 1、C程序的基本框架 // 预处理器指令&#xff0c;引入需要的头文件 #include <iostream> // 使用标准命名空间 using namespace std; // 主函数&#xff0c;程序的入口 int main() {// 局部变量声明// 程序逻辑代码// 返回值&#xff0c;表示程序正常结束…

PHP中的while循环:用法、技巧与最佳实践

在PHP编程中&#xff0c;while循环是一种基本且常用的控制结构&#xff0c;用于重复执行代码块&#xff0c;直到指定条件为假。while循环在处理未知迭代次数的任务时特别有用&#xff0c;例如读取文件内容、处理用户输入或动态生成数据等。与for循环不同&#xff0c;while循环适…