【日常总结】c++静态成员为啥要在类外进行初始化

2023-10-29

解释

类的静态成员变量内存不属于实例化的类,在类内只起到申明的作用。
必须要在类外进行初始化,这个说法不严谨,类外主要是进行定义,分配内存,同时也可以赋初始值;

代码例子

test.h

#pragma once
#include <iostream>
class Test
{
public:
	void get_static_private_value();
	static int static_public_value;

private:
	static int static_private_value;  // 这里只起到声明作用
};

test.cpp

#include "test.h"
// 静态变量不进行定义就会出错,类内不会分配内存给静态变量
int Test::static_private_value;  // 定义,主要是分配内存
// int static_private_value = 1;  // 也可以定义和初始化同时进行
int Test::static_public_value; 

void Test::get_static_private_value() {
	std::cout << Test::static_private_value << std::endl;
};

main.cpp

#include "test.h"
int main()
{
	Test test;
	test.get_static_private_value();
	std::cout << Test::static_public_value << std::endl;  // 共有静态变量可以直接使用,私有静态变量需要通过函数调用
	return 0;
}

运行结果

0
0

ps

  • private static 和 public static 都是静态变量,在类加载时就定义,不需要创建对象
  • private static 是私有的,不能在外部访问,只能通过静态方法调用,这样可以防止对变量的修改
  • static 成员函数只能访问static成员变量,非static成员函数可以访问static成员变量
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【日常总结】c++静态成员为啥要在类外进行初始化 的相关文章

  • 为什么使用abs()或fabs()而不是条件否定?

    在 C C 中 为什么要使用abs or fabs 不使用以下代码即可查找变量的绝对值 int absoluteValue value lt 0 value value 这与较低级别的指令较少有关吗 您提出的 有条件的abs 并不等于std
  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况

随机推荐

  • 中国自主可控计算机大会、,2019CCF自主可控计算机大会召开

    nbsp nbsp nbsp nbsp光明网讯 齐柳明 7月23日至24日 2019CCF自主可控计算机大会 在北京召开 会议以 应用驱动 协同创新 自主可控发展的源泉和动力 为主题 大会在目前自主可控计算机发展态势良好基础上 针对相关信息
  • css 选择除了某个类下的所有某种元素

    要求 选择除了某个类下的所有input输入框 非页脚下的输入框高度 input not bs table foot input height 40px important line height 40px important
  • PyTorch框架中使用早停止Early Stopping(含详细代码)

    文章目录 1 什么是早停止 为什么使用早停止 2 如何使用早停止 3 Refferences 1 什么是早停止 为什么使用早停止 早停止 Early Stopping 是 当达到某种或某些条件时 认为模型已经收敛 结束模型训练 保存现有模型
  • vue.config.js基本配置

    方法一 vue3 vue config js const defineConfig require vue cli service module exports defineConfig transpileDependencies true
  • visual studio下C4146错误分析与整理

    C4146报错原因分析 标签 空格分隔 C C4146 一元负运算符应用于无符号类型 结果仍为无符号型 文章目录 C4146报错原因分析 toc 事发现场 翻车过程 翻车原因 解决方案 番外篇 事发现场 include
  • 如何看待越来越多年轻人追捧「摸鱼哲学」,拒绝努力的年轻人真比老一辈活得更通透吗?

    题目是我在知乎上看到的 有些小伙伴应该也看到了 不知道有没有触动到你 反正我是心有戚戚焉 上周五 我去了一趟郑州 见了几个大学同学 吃了一顿饭 喝了点小酒之后 我们谈了很多各自的现状 龙仔和小龙都说 公司现在的年轻人 真不知道在想些什么 任
  • Linux主流架构运维工作简单剖析

    随着IT运维的不断发展 尤其的Linux的飞速发展 越来越多的企业开始使用Linux操作系统平台 例如CentOS RedHat Ubuntu Fedora等等 成千上亿个网站涌现在当今互联网 互联网已经成为必不可少的工具 那今天我们跟大家
  • 数据库原理 知识点总结

    名词积累 数据库 Database 存放和提供数据的 库房 数据 Data 数据库中存储的基本对象 数据库管理系统 DBMS 位于用户与操作系统之间的一层数据管理软件 数据库系统 Database System 包括数据库 DBMS 应用系
  • Git提交代码或文件

    一 直接通过git命令提交 1 git add 将所有文件加到提交区 2 git commit m 注释 提交注释 3 git pull rebase origin master 拉去代码 且把提交的线路融合在一起 4 git push u
  • Java中转化Stream流及多个Stream流如何合并

    题目 如何将对象转化为Stream流及多个Stream流如何合并 特别注意基本类型数组转化成的流 准备 Java中Stream流是JDK1 8出现的新特性 Stream流多用于过滤 转换 统计等 Stream类的静态方法 Stream co
  • javaScript-----数组使用字符串作为下标

    原文地址 http blog csdn net chenssy article details 7366160 首先Array是从Object那里继承下 它具备Object所有的功能和特性 下面是Object的情况 html view pl
  • 完美的Apache静态.htaccess文件 [discuz和home带301重定向]

    完美的Apache静态 htaccess文件 discuz和home带301重定向 本帖最后由 下砂 于 2009 11 13 10 32 编辑 先后修改过三次 加了301重定向 顶级域名和论坛二级域名 后rewrite base保持 状态
  • 无法加载训练好的.h5权重

    Unable to open file unable to open file name h5 errno 2 error message No such file or directory 确认模型是正确的情况下 最好的办法是升级h5py
  • AD中如何做出爱心❤的丝印

    不知道有没有小伙伴试过在AD中做一个爱心的丝印 今天在这里就跟大家分享一下 如何做一个带爱心 的丝印 具体方法就是我们在字符串输入框中输入相应的内容和 爱心 的话可以通过搜狗输入法打一个 心 字就会弹出哦 选择字体 MS UI Gothic
  • 《逻辑与计算机设计基础(原书第5版)》——2.9 硬件描述语言—VHDL

    2 9 硬件描述语言 VHDL 由于硬件描述语言用来描述和设计硬件 故在使用该语言编程时 应牢记底层的硬件实现 特别是当你的设计将用来综合时 例如 如果忽略将要生成的硬件 那么你可能会用低效的硬件描述语言设计出一个大且复杂的门级结构 而实际
  • Harmony Codelab 样例—弹窗基本使用

    一 介绍 本篇 Codelab 主要基于 dialog 和 button 组件 实现弹窗的几种自定义效果 具体效果有 1 警告弹窗 点击确认按钮弹窗关闭 2 确认弹窗 点击取消按钮或确认按钮 触发对应操作 3 加载弹窗 展示加载中效果 4
  • 我与西门子的面试全过程(一面+二面)_2008校园招聘_笔试与面试分享_UNUS.CN

    导读 很庆幸自己能够参加世界500强企业 西门子的面试 经过了一面和二面 虽然最后没有被录取 但高兴的是我们广工有两个进了 在这里祝福他们 今天终于有空 写下自己与西门子的全过程 写下这篇文章 并不是想炫耀 而是真心希望对后来者有帮助 在学
  • 【LeetCode】426. 将二叉搜索树转化为排序的双向链表(剑指 Offer 36)

    一 题目 将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 对于双向循环列表 你可以将左右孩子指针作为双向循环链表的前驱和后继指针 第一个节点的前驱是最后一个节点 最后一个节点的后继是第一个节点 特别地 我们希望可以 就地 完成转换
  • 【PaddlePaddle】 mnist手写数字识别(卷积神经网络)

    这篇文章主要讲解了卷积神经网络的使用 卷积神经网络可以用来提取图像特征 所以在计算机视觉上有很好的效果 系统 ubuntu18 04 python版本 python2 7 目录 训练模型 进行预测 完整代码 训练模型 先把需要用到的模块导入
  • 【日常总结】c++静态成员为啥要在类外进行初始化

    解释 类的静态成员变量内存不属于实例化的类 在类内只起到申明的作用 必须要在类外进行初始化 这个说法不严谨 类外主要是进行定义 分配内存 同时也可以赋初始值 代码例子 test h pragma once include