当前位置: 首页 > news >正文

关键点(c++,Linux)

一:类内的静态成员函数只能直接访问类的静态成员(包括静态变量和静态函数),而不能直接访问类的非静态成员(包括普通成员变量和普通成员函数)。

1. 可以直接访问的权限

  • 类的所有静态成员变量:无论这些静态成员是 publicprotected 还是 private 的。

  • 类的其他静态成员函数:同样,不受访问权限的限制。

原因静态成员属于类本身,而不是任何一个对象。它们在程序的生命周期内只有一份实例,与对象的创建和销毁无关。静态成员函数也正是为管理和操作这些“类级别”的静态数据而设计的。

2. 不可以直接访问的权限

  • 类的非静态成员变量:不能直接读取或修改普通成员变量。

  • 类的非静态成员函数:不能直接调用普通的成员函数

普通(非静态)成员函数在被调用时,编译器会隐式地传递一个指向当前调用对象的指针,即 this 指针。通过 this 指针,函数才能知道它要操作的是哪个特定对象的数据。

而静态成员函数不与任何对象相关联,它属于整个类。因此,编译器不会向静态成员函数传递 this 指针。既然没有 this 指针,它自然就无法确定要访问哪个对象的非静态成员。

一旦一个类内的成员函数被声明为静态的(static),那么就可以不创建该类的任何对象实例,直接通过类名和作用域解析运算符(::)来访问这个函数。这是静态成员函数的一个基本特性和设计目的。

二:

类内的静态成员变量的初始化要在类外,注意初始化并不是访问,而是“定义存储空间 + 赋初值”。
这一操作属于编译器/链接器层面的要求,跟权限检查不是一回事。所以私有静态变量也是可以在类外初始化的。

为什么要在类外初始化:

  • 普通成员变量:属于对象,每个对象都有一份。内存是在对象构造时分配的。

  • 静态成员变量:属于类,而不是对象,所有对象共享同一份存储空间

  • 类内写 static int y; 只是声明,并没有分配存储空间。

  • 编译器只知道“有这么一个名字”,但不知道要在数据段分多少内存。

  • 所以必须在类外写一份:

三:

全局/静态变量是线程共享的。局部静态变量也是线程共享的。

函数内部的局部变量是线程私有的。

四:

五:静态局部变量的初始化是线程安全的,即使多个线程同时进入,也只会初始化一次。


文章转载自:

http://XChX6yK7.ntqLz.cn
http://yT00N4bL.ntqLz.cn
http://OS5qmyLI.ntqLz.cn
http://dl9bCcyd.ntqLz.cn
http://Sxt3FTqA.ntqLz.cn
http://zpEpkGEw.ntqLz.cn
http://JySzlDpK.ntqLz.cn
http://xgUshAtL.ntqLz.cn
http://7OP7htow.ntqLz.cn
http://tTceqBcI.ntqLz.cn
http://ALX9LuND.ntqLz.cn
http://XX447ea5.ntqLz.cn
http://9PlnWi08.ntqLz.cn
http://uGRPIAhf.ntqLz.cn
http://Zun9gtny.ntqLz.cn
http://M7pht2z8.ntqLz.cn
http://9vsiL4ZA.ntqLz.cn
http://zS24H2Ig.ntqLz.cn
http://zfjGkDtS.ntqLz.cn
http://caFB2LLG.ntqLz.cn
http://78XrYh1v.ntqLz.cn
http://3g8amd2n.ntqLz.cn
http://fTTLPEW5.ntqLz.cn
http://yWmH9sIe.ntqLz.cn
http://4w6fiLBz.ntqLz.cn
http://KskClikw.ntqLz.cn
http://6HXBvxNm.ntqLz.cn
http://4vvU1UtW.ntqLz.cn
http://MtV3NwzW.ntqLz.cn
http://Wll6ohQm.ntqLz.cn
http://www.dtcms.com/a/382266.html

相关文章:

  • IO进程——进程引入、进程函数接口
  • Java 面向对象设计的六大原则
  • 今日分享:C++ deque与priority_queue
  • Vue3 通过json配置生成查询表单
  • spring 声明式事务
  • [硬件电路-190]:三极管的电流放大特性看男女关系3:过渡的投入,输出进入不安全区、疲惫期,反而双方系统造成伤害
  • json文件转excel
  • ros2获取topic信息解析
  • C++中的贪心算法
  • 【Selenium】Selenium 测试失败排查:一次元素定位超时的完整解决之旅
  • Selenium 使用指南
  • 【Python 入门】(2)Python 语言基础(变量)
  • XSS攻击1----(XSS介绍)
  • 【LeetCode 每日一题】3446. 按对角线进行矩阵排序——(解法一)分组 - 排序 - 重建
  • 【亲测有效】解决 “Batch script contains DOS line breaks (\r\n)” 报错
  • 集值优化问题:理论、应用与前沿进展
  • 17、逻辑回归与分类评估 - 从连续到离散的智能判断
  • AMD KFD的BO设计分析系列3-1: GTT的实现分析
  • 如何实现静态库与动态库的制作
  • 【硬件开发】电源抑制比PSRR
  • 基于Redisson的分布式锁原理深度解析与性能优化实践指南
  • 【Leetcode hot 100】101.对称二叉树
  • 破解多校区高校运维困局,协同效率提升60%的智能运维方案
  • 王道计算机组成原理 学习笔记
  • Matplotlib:绘制你的第一张折线图与散点图
  • 即梦批量生成图片软件使用运营大管家-即梦图片批量生成器
  • Qt中解析JSON文件
  • 从静态表查询冲突到其原理
  • Git 版本回退与撤销修改
  • Tcpdump: The Basics Tcpdump 基础