【C++】静态类成员

news/2024/4/28 5:29:08/文章来源:https://blog.csdn.net/weixin_43717839/article/details/130026826

类中静态成员的特点是:无论创建了多少对象,程序都只创建一个静态类变量副本。也就是说,类的所有对象共享同一个静态成员,就像家中的电话可被全体家庭使用一样。
但是注意,不能在类声明中初始化静态成员变量,这是因为类声明描述了如何分配内存,但并不分配内存。
但是一种例外情况是,静态数据成员为整型const或枚举型const。
(请注意这里,C++primer plus里说的是:但是一种例外情况是,静态数据成员为整型或枚举型const。这里应该是个病句,具有二义性,我一度以为说的是整型或者枚举型const,但是怎么实验都过不去,后来才突然看懂这句话的实际意思是整型const或者枚举型const)

关于C++11静态成员变量的类内初始化

先放测试后得到的结论,如下表所示。

静态成员变量类型 是否可以类内初始化
static int	不可以
static const int	可以
static const float	不可以
static constexpr int	必须

总的来说,只有在以下两种情况下,静态成员变量才可以在类内初始化。

使用const修饰的静态整型变量:比如static const int | char | long等。
使用constexpr修饰的所有静态变量:比如static constexpr int | float | double等。

注:第二种类型的变量必须在类内进行初始化。 此外,非静态成员变量不能用constexpr修饰。

测试代码如下:

class ConstTest {
public:/*报错: ISO C++ forbids in-class initialization of non-const static member 'ConstTest::a' 解释: 非常量静态成员不能在类内初始化*/static int a = 1;      				// true/*报错: 'constexpr' needed for in-class initialization of static data member 'float ConstTest::b' of non-integral type解释: 非整形类型的静态数据成员若要在类内初始化, 必须加上关键字constexpr*/static float 	   b = 0.1;       	// falsestatic const float c = 0.1;    		// false/*报错: 'constexpr' static data member 'd' must have an initializer解释: constexpr静态数据成员必须要在类内初始化*/static constexpr float d;			// falsestatic const int e = 1;        		// truestatic constexpr int f = 1;			// truestatic constexpr float g = 0.1;		// truestatic const int h;					// true
};const int ConstTest::h = 1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_283471.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客网算法八股刷题系列(六)正则化与偏差、方差的联系

牛客网算法八股刷题系列——正则化与偏差、方差的联系题目描述正确答案:C\mathcal CC题目解析场景构建λ⇔Bias\lambda \Leftrightarrow \text{Bias}λ⇔Bias拉格朗日乘数法角度权重衰减角度(包含λ⇔Variance\lambda \Leftrightarrow \text{Variance}λ⇔Variance解…

基于html+css的内容旋转

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

一起学 WebGL:绘制一个点

大家好,我是前端西瓜哥。 本文讲解如何用 WebGL 绘制一个点。 WebGL WebGL 是浏览器支持的一种绘制图形的 API,是一个标准。我们可以通过 Canvas 元素 在网页的特定区域绘制 2D 和 3D 图形。 相比 Canvas 2D,WebGL 利用了 GPU 的计算能力…

真给科技企业丢脸,在美国亚马逊做普通工人,你会吃不饱肚子

亚马逊公司(Amazon),成立于1995年,是全球最大的一家科技创新型电子商务公司,是全球电子商务的最老资格。自从2015年底,亚马逊在俄亥俄州哥伦布市运营大型仓库,如今的亚马逊已经成为俄亥俄州最大…

基于C#语言专业开发的一套:医院手麻系统源码

手术室麻醉信息管理系统源码,手麻系统源码,C#手术麻醉系统源码 相关技术:C#语言前端框架:Winform后端框架:WCF数据库:sqlserver开发工具:VS2019 文末获取联系! 系统概述: 手术麻醉…

全国青少年信息素养大赛2023年python·必做题模拟一卷

全国青少年电子信息智能创新大赛 python必做题模拟一卷 一、单选题 1. 以下哪种输入结果不可能得到以下反馈: 重要的事情说三遍:安全第一!安全第一!安全第一!( ) A、print("重要事情说…

Redis 如何配置读写分离架构(主从复制)?

文章目录Redis 如何配置读写分离架构(主从复制)?什么是 Redis 主从复制?如何配置主从复制架构?配置环境安装 Redis 步骤通过命令行配置从节点通过配置文件配置从节点redis 主从复制优点redis 主从复制缺点Redis 如何配…

Git仓库集成到VScode

前提是一种安装了Git,这里就不再介绍安装过程,进入Git官网进行下载安装即可。 这里用Gitee作为远程仓库演示,首先在gitee上新建仓库 新建完毕,生成了HTTPS地址,复制该远程仓库地址。 来到vscode,在没有仓库…

五.microchip 代理贝能的sam d51(LQFP100PIN)与LAN9253 电机控制开发板使用总结(3)

五.microchip 代理贝能的sam d51(LQFP100PIN)与LAN9253 电机控制开发板使用总结(3) 3.4 板子相关外设配置 3.4.1 板子MCU硬件 的LAN9253连接接口 pin numpin idcus_namefuncmodedirlatchpush uppush downdir str1PA00GPIO_PA0_D0GPIOINYNORMAL2PA01GP…

leetcode:只出现一次的数字 Ⅲ(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任…

DOS批处理文件---内嵌参数变量扩充功能

1 内嵌参数变量 1.1 介绍 内嵌参数变量指:%i,其中i为大于等于0的整数。如%0, %1, %2,... 1.2 作用 可以客制化功能。 1.3 案例 批处理文件:main_Param.bat echo off && setlocal ENABLEDELA…

Solidworks学习一

目录页面介绍:视图操作:实例圆柱:直线的绘制:草图的保存和不保存:绘制工具:切线弧:转换实体引用:交叉曲线:等距实体:移动复制:约束:约…

MyBatisPlus-DQL编程控制

MyBatisPlus-DQL编程控制3,DQL编程控制3.1 条件查询3.1.1 条件查询的类3.1.2 环境构建3.1.3 构建条件查询3.1.4 多条件构建3.1.5 null判定3.2 查询投影3.2.1 查询指定字段3.2.2 聚合查询3.2.3 分组查询3.3 查询条件3.3.1 等值查询3.3.2 范围查询3.3.3 模糊查询3.3.4…

一起学 WebGL:动态绘制点

大家好,我是前端西瓜哥。上一篇文章讲解了如何绘制一个点。但这个点的信息是写死在渲染器源码中的,也就是硬编码。 这是系列文章,如果你是初学者,你需要看上一篇文章才好理解这节课的内容。 《一起学 WebGL:绘制一个点…

python五角星编程代码绘制

大家好,我是你们的好朋友,今天继续分享 Python的编程知识。 在 Python中,有一个非常强大的数据可视化工具: database. dl (),其中有一个功能就是可以绘制五角星。 什么是五角星? 在数…

jenkins配置插件发版了解

jenkins配置&插件&发版了解 jenkins https://mirrors.jenkins.io/war-stable/2.222.1/ 包下载地址 jenkins镜像源修改 sed -i s/https:\/\/www.google.com/https:\/\/www.baidu.com/g default.json sed -i s/https:\/\/updates.jenkins.io\/download/https:\/\/mi…

怎么使用思维导图?

回答这个问题前,我们先来了解下三个问题: 1.思维导图是什么? 思维导图,又名心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效同时又很高效,是一种实用性的思维工具&#xff08…

Ubuntu22.04中安装PyCharm

目录 1. 在ubuntu中下载linux版本的PyCharm。 2. 将下载好的pycharmxxxx.tar.gz文件解压。 3. 在解压后的pycharm文件夹下的bin文件夹下(此处为:pycharm-edu-2021.1.2/bin),在空白处右键,然后选择”在终端打开“。然…

蓝桥杯第26天(Python)考前挣扎

题型: 1.思维题/杂题:数学公式,分析题意,找规律 2.BFS/DFS:广搜(递归实现),深搜(deque实现) 3.简单数论:模,素数(只需要…

使用 LifseaOS 体验 ACK 千节点分钟级扩容

作者:阿里云 ACK 和操作系统团队 三年前的云栖大会上,LifseaOS 正式发布,这是一款专为云原生场景而垂直优化的操作系统发行版,即业界统称的 ContainerOS。初始发布时,它提供了如下几个突出的特性:轻量&…