为什么只有const-static-枚举/整型才可以类内初始化

在C++中,静态数据成员(static member)是类的所有对象共享的一个变量。由于它们不是与类的任何特定对象实例相关联的,因此不能在类的构造函数中初始化它们。静态数据成员的初始化必须在类定义之外进行,除非它们满足特定的条件。

对于整型(包括charboolshortintlonglong long等)或枚举类型enum)的静态数据成员,如果它们被声明为const,则可以在类定义内直接进行初始化,作为常量表达式(constant expression)。这种初始化的方式有几个原因:

  1. 常量性:由于这些静态数据成员被声明为const,它们的值在程序运行期间不会改变。因此,编译器可以确保在编译时就能确定它们的值。
  2. 编译时优化:在类定义内部直接初始化允许编译器在编译时执行某些优化,因为它知道这些值在程序的生命周期中是固定的。
  3. 简洁性:直接在类定义中初始化静态常量成员可以使代码更加简洁和易于阅读。
  4. 作用域:在类定义中初始化允许这些常量在类的所有成员函数和友元函数中直接使用,而无需额外的声明或定义。

然而,需要注意的是,虽然可以在类定义内部进行初始化,但实际的内存分配和初始化仍然是在编译单元(通常是.cpp文件)中进行的。因此,你仍然需要在类定义之外提供一个定义,以告诉编译器在哪里为静态成员分配内存。但是,这个定义通常不包含初始化表达式,因为初始化已经在类定义中完成了。

class Person
{//static int a = 0;const static int a1 = 0;const static long long a2 = 0;//const static float a = 0;const static float a;const Color color = Color::WHITE;
};
const float Person::a = 10;

枚举:

#include<iostream>
using namespace std;enum class Color
{WHITE = 1,BLUE = 2,BLACK=3
};enum colorD
{white = 1, blue=2,yellow=3
};int main()
{cout << static_cast<int>(Color::WHITE) << endl;cout << colorD::white;//cout << WHITE << endl;  //nocout << white;//ok//int a = WHITE; cout << a << endl;  //noint b = white; cout << b << endl;
}

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

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

相关文章

谷歌I/O 2024大会全面硬刚OpenAI

&#x1f989; AI新闻 &#x1f680; 谷歌发布升级版Gemini机器人 竞争OpenAI ChatGPT-4 摘要&#xff1a;谷歌展示了升级版的 Gemini 聊天机器人&#xff0c;其支持实时处理视频和语音输入&#xff0c;并准确回答问题。此次发布时机与 OpenAI 公布 ChatGPT-4o 新模型几乎同步…

pycharm导入项目,创建虚拟环境,下载依赖

1、安装conda&#xff0c;此处省略 2、管理员身份打开CMD命令行&#xff0c;创建虚拟环境 conda create --name env_name python3.7 -y 其中&#xff0c;env_name替换为自己想要的环境名字&#xff0c;python3.7表示指定python版本为3.7&#xff0c;-y意味着遇到询问直接回复…

Redis经典问题:BigKey问题

大家好,我是小米,今天来和大家聊聊Redis中的一个经典问题:BigKey问题。在互联网系统中,我们经常需要保存大量的用户数据,比如用户的个人信息、粉丝列表、发表的微博内容等等。这些数据往往会被存储在Redis这样的缓存系统中,以提高系统的性能和响应速度。但是,在处理这些…

什么样的开放式耳机好用舒服?五款高人气质量绝佳产品力荐!

​随着人们越来越注重个人的身体健康问题&#xff0c;掀起了一股运动浪潮&#xff0c;现在大家都会喜欢跑跑步&#xff0c;运动一下使自己的身体更好&#xff0c;那么在运动时候如果能有音乐听的话&#xff0c;人们的运动状态就能达到更好的水平。鉴于传统入耳式耳机给用户带来…

基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 扩散映射&#xff08;Diffusion Maps&#xff09; 4.2 卡尔曼滤波 4.3 基于梯度流的扩散映射卡尔曼滤波&#xff08;GFDMKF&#xff09; 5.完整程序 1.程序功能描述 基于梯度流的扩散…

一文全解聚碳酸酯PC材料在汽车灯罩制造中的诸多显著优势!汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

聚碳酸酯PC材料在汽车灯罩制造中具有诸多显著优势。除了优异的抗冲击性、透明性、耐热性和稳定性外&#xff0c;还有以下一些重要优势&#xff1a; 出色的光学性能&#xff1a;PC材料的光学性能优异&#xff0c;能够确保灯罩内的光源均匀分布&#xff0c;减少光斑和眩光&#…

从0到1,百亿级任务调度平台的架构与实现

尼恩&#xff1a;百亿级海量任务调度平台起源 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;经常性的指导小伙伴们改造简历。 经过尼恩的改造之后&#xff0c;很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会&#x…

软件库V1.5版本iApp源码V3

软件库V1.5版本iApp源码V3 配置教程在【mian.iyu】的【载入事件】 更新内容&#xff1a; 1、分类对接蓝奏&#xff08;免费&#xff0c;付费&#xff0c;会员&#xff0c;广告&#xff09;&#xff0c;支持蓝奏文件描述设置为简介&#xff08;改动&#xff1a;首页.iyu&#…

Pikachu 靶场 SQL 注入通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

【美团面试2024/05/14】前端面试题滑动窗口

一、题目描述 设有一字符串序列 s&#xff0c;确定该序列中最长的无重复字母的子序列&#xff0c;并返回其长度。 备注 0 < s.length < 5 * 104 s 由英文字母、数字、符号和空格组成 示例1 输入 s "abcabcbb" 输出 3 二、原题链接 这道题在LeetCode上的原题链…

场景文本检测识别学习 day09(SSM、S4、Mamba、S6)

SSM&#xff08;State Space Model&#xff09; SSM是一个针对连续函数的模型&#xff0c;即输入是连续函数&#xff0c;输出也是连续函数。上图为状态方程和输出方程&#xff0c;其中h(t)是当前时刻的状态&#xff0c;x(t)是当前时刻的输入&#xff0c;h’(t)是下一个时刻的状…

训练集、测试集与验证集:机器学习模型评估的基石

在机器学习中&#xff0c;为了评估模型的性能&#xff0c;我们通常会将数据集划分为训练集&#xff08;Training Set&#xff09;、验证集&#xff08;Validation Set&#xff09;和测试集&#xff08;Test Set&#xff09;。这种划分有助于我们更好地理解模型在不同数据上的表…

【Spring】AbstractApplicationContext源码解读

这个类源码一打开&#xff0c;我滴妈有一种我不卷了&#xff0c;我送外卖去了的感觉1500行 但是还是对你自己说 坚持坚持再坚持。35岁再送外卖也不迟。 这里我们先看这个抽象类的注释&#xff1a; Abstract implementation of the ApplicationContext interface. Doesnt man…

docker 修改运行容器环境变量

文章目录 前言第一步&#xff1a;查看Docker Root目录第二步&#xff1a;查到容器的长id&#xff08;container id&#xff09;第三步&#xff1a;停止容器第四步&#xff1a;编辑修改环境变量env第五步&#xff1a;重载服务的配置文件第六步&#xff1a;重启docker 总结 前言 …

力扣416. 分割等和子集

Problem: 416. 分割等和子集 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该题目可以归类为0-1背包问题&#xff0c;具体到细节可以再归纳为背包是否装满问题 1.首先判断数组元素和的奇偶性&#xff08;奇数则不能划分&#xff09; 2.我们定义一个二维布尔类型数组…

【opencv】opencv透视变换和ocr识别实验

实验环境&#xff1a;anaconda、jupyter notebook 实验用到的包opencv、numpy、matplotlib、tesseract 一、opencv透视变换 原图 图片是我拍的耳机说明书&#xff0c;哈哈哈哈&#xff0c;你也可以使用自己拍的照片&#xff0c;最好是英文内容&#xff0c;tesseract默认识别英…

iOS Xcode Debug View Hierarchy 查看视图层级结构

前言 我们难免会遇到接手别人项目的情况&#xff0c;让你去改他遗留的问题&#xff0c;想想都头大&#xff0c;&#x1f602;可是也不得不面对。作为开发者只要让我们找到出问题的代码文件&#xff0c;我们就总有办法去解决它&#xff0c;那么如何快速定位问题对应的代码文件呢…

FullCalendar日历组件集成实战(4)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…

python如何做一个服务器fastapi 和flask

用 fastapi 方式的话 from fastapi import FastAPIapp FastAPI()app.get("/api") def index():return "hello world"然后需要安装 uvicorn 并执行下面的命令 uvicorn server:app --port 8000 --reload最终 如果是用 flask 直接写下面的代码 # -*- cod…

IP代理网络协议介绍

在IP代理页面上&#xff0c;存在HTTP/HTTPS/Socks5三种协议。它们都是客户端与服务器之间交互的协议。 HTTP HTTP又称之为超文本传输协议&#xff0c;在因特网使用范围广泛。它是一种请求/响应模型&#xff0c;客户端向服务器发送请求&#xff0c;服务器解析请求后对客户端作出…