C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

2023-05-16

有些成员变量的数据类型比较特别,它们的初始化方式和普通数据类型的成员变量有所不同。这些特殊类型的数据类型包括:

  • 引用(&)
  • 常量(const)
  • 静态(static)
    • 静态常量(static const)
      • 整数类型(integral types:int、char、bool)
      • 非整数类型

常量(const)和引用(&)必须通过过参数列表进行初始化;

静态成员变量的初始化有些特别,是在类外初始化且不能在带有 static 关键字;

带有类内初始值设定项的成员必须为常量(且为 integral types);

所以,纵向来看,初始化方式主要有两种:

  • 初始化参数列表:const,引用
  • 类外初始化:static(且不再带有 static 关键字)
  • 类内初始值设定:const + integral type

横向来看,不同数据类型的初始化方式分别为:

  • 引用:初始化参数列表
  • const
    • 类内初始化值设定(如果为integral types)
    • 初始化参数列表
  • static:
  • 类外初始化,且不再带有 static 关键字
  • 类内初始化设置,必须为 const,且 integral
  • 不可通过构造函数的初始化参数列表进行初始化
    • static不属于某一特定的类实例,而是属于类,显然不能通过构造函数的初始化参数列表进行 static 变量的初始化

进行类内初始值设定的成员变量的数据类型必须满足:

  • const
  • integral types(int、char、bool)
class Test
{
public:
    Test():i(1), ri(i), ci(2), cd(0.)
    {}
                // 对于一般常量型(非integral type)和引用型成员变量,必须通过初始化参数列表进行初始化
                // 普通成员变量也可以放在函数体中,但本质已不是初始化,而是一种普通的赋值运算,效率极低
private:
    int i;
                // 普通成员变量
                // 初始化参数列表,函数体
    int& ri;
                // 引用,初始化参数列表
    const int ci;
                // 常量
                // 类内初始值设定
                // 初始化参数列表
    const double cd;
                // 常量非integral types
                // 初始化参数列表
    static int si;
                // 静态非常量
                // 类外
    static const int sci;
                // 静态常量(integral type)
    static const double scd;
                // 静态常量(非integral )
};

一般常量类型(未被 static 修饰)、引用类型,在类内部即可实现初始化,在类外实现初始化的必定是 static 类型(当然一部分的静态成员,也即同时又是 constintegral type的,可在类内初始值设定,这一语法特性并非为所有的编译器所支持,所以一种推荐的做法,即是凡是 static 类型的,我们总在类外进行初始化,哪怕它在类内已进行初始值设定,只要在类外初始化时不修改其值):

int Test::si = 0;
const int Test::sci = 1;
const double Test::scd = 99.0;

静态成员属于类作用域,但不属于类对象实例,和普通的static 变量一样,程序一运行就分配内存并初始化,生命周期和程序一致;

静态成员其实和全局变量的地位是一致的,只不过编译器把它的使用限制在类作用域内。

References

[1] C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 类中特殊成员变量(常量、静态、引用)的初始化方法 的相关文章

  • aes-128 速度测试

    官方白皮书 xff1a Intel Advanced Encryption Standard AES New Instructions Set pdf https software intel com zh cn articles inte
  • 【Feature Denosing】Feature Denoising for Improving Adversarial Robustness

    摘要 对图像分类系统的对抗攻击 xff0c 给卷积网络带去挑战的同时 xff0c 也提供了一个理解他们的机会 对抗扰动使得网络提取的特征包含噪声 受这个观察启发 xff0c 我们执行feature denoising 具体来说 xff0c
  • Tomcat8.5配置https启动报空指针错误

    Tomcat8 5配置https启动报空指针错误 报错信息tomcat SSL配置Tomcat8 5 8及以上而外配置 SSL别名获取 报错信息 报错代码 span class token number 02 span span class
  • python琐事系列1:关于如何真正的在vscode用gpu跑代码

    你们要的完整代码 xff1a span class token punctuation span span class token comment 使用 IntelliSense 了解相关属性 span span class token c
  • 影响力最大化 CELF 成本效益延迟转发算法

    文章目录 简介CELF Cost Effective Lazy Forward Algorithm算法原理算法实现代码实现实例测试 简介 对于影响力最大化问题 xff0c 我以前写过几个blog 影响力最大化 IC模型 43 贪心算法 影响
  • 单片机对底层寄存器的操作

    最近项目用到了国产的一款单片机 xff0c 没有例程的支持 xff0c 需要自己从头开始写底层 又感受到了自己本科刚学习51的时候的浮躁 xff0c 不懂得如何操作底层的寄存器 xff0c 只是一味的抄写别人的例程 xff0c 然后进行简单
  • 如何使用策略模式,优化代码里的if-else?

    什么是策略模式 策略模式属于行为型模式 xff0c 类的行为可以根据不同的策略在运行中更改 策略模式的作用 策略模式主要解决了使用if else所带来的复杂性和难以维护的问题 策略模式的架构图 Strategy 策略接口 xff1a 定义抽
  • VNC 连接桌面灰色

    在使用VNC Veiwer连接腾讯云的过程中 xff0c VNC总是灰色的 大多数博客都说是 修改配置文件 vnc xstartup 尝试了很久无果 百度了下面这个错误 Can t find file root vnc VM 0 15 ub
  • C#控件学习--选择类控件

    下拉组合框控件 xff08 ComboBox控件 xff09 创建只可以选择的下拉框 通过设置控件的DropDownStyle属性 xff0c 可以将ComboBox控件设置为可以选择的下拉框 DropDownStyle 属性有3个属性值
  • 云计算之弹性伸缩

    案例1 xff1a 2009年 xff0c 第一次淘宝双十一活动 xff0c 每秒订单只有400笔 xff0c 支付达到极限每秒200笔 2015年淘宝双十一 xff0c 每秒订单创建24万笔 xff0c 支付达到了每秒18 59万笔 每秒
  • Vue2.x与3.x生命周期

    生命周期 一个框架从创建到销毁一系列的过程叫生命周期 在生命周期的过程中会执行相应的函数叫钩子函数 生命周期钩子 61 生命周期函数 61 生命周期事件 过程 beforeCreate 开始创建一个vue实例 初始化vue实例 xff0c
  • 国内银行卡BIN号(Bank Identification Number)速查简表

    转载 xff1a https blog csdn net qq 37960324 article details 82981824 国内银行卡BIN号 Bank Identification Number 速查简表 银行名称 银行卡 卡BI
  • 判断一个对象是否为数组的4种方法

    问题描述 在js中判断数据类型通常使用typeof xff0c 但是typeof在判断数组和对象时的结果都是object console span class token punctuation span span class token
  • 去重三种方法

    数组去重三种方法 问题情境 去除数组中重复的元素 输出不重复的元素数组 思路方向 将数组中重复的元素删除将数组中不重复的元素取出利用其它 JavaScript 特性和 API 直接去重 这一思路中有些 API 涉及ES6中的某些知识暂不提及
  • 百度地图API简介

    百度地图API 简介 百度地图API是百度地图开放平台面向广大政府 企业 互联网等开发者开放的免费地图服务 拥有定位 地图 导航 轨迹 路况 路线规划 搜索 xff0c 七大基础地图服务能力 xff0c 并将七大服务能力开放给各行业开发者使
  • svg和canvas的区别简析

    Canvas和SVG是html5中支持2种可视化技术 xff0c 都是可以在画布上绘制图形和放入图片 下面来介绍和分析一下他们 一 Canvas 和 SVG 简介 1 什么是Canvas xff1f Canvas 是H5新出来的标签 Can
  • 微信小程序:实现长按扫描二维码

    小程序内置扫描二维码 image 使用小程序提供的image组件 xff0c image组件上有一个show menu by longpress的属性 xff0c 设置为true lt image show menu by longpres
  • 微信小程序:小程序常见问题及解决方案

    文章目录 原生组件显示在遮罩层上面的问题scroll view高度适配问题表单控件聚焦后页面上推问题小程序web view页面返回到小程序页面 原生组件显示在遮罩层上面的问题 在小程序中使用原生的表单组件时 xff0c 在有弹出框出现的情况
  • Echarts:惊艳的Map

    大家在网上看天气预报的时候应该就看到过在中国地图上显示不同省份的温度 xff0c 并根据温度的高低显示不同的颜色 xff0c 又或者看到各个省份的新冠肺炎新增人数 xff0c 根据不同的新增人数显示不同的颜色之类的图像 这些 xff0c 使
  • 微信小程序性能优化

    文章目录 小程序优化首屏加载优化白屏优化运行时性能渲染性能优化页面切换优化 小程序优化 首屏加载优化 删除无用代码 资源文件 开启按需加载组件 span class token comment app json span span clas

随机推荐

  • webStorage

    cookie 在webStorage出现之前在浏览器端存储数据通常使用cookie cookie是某些网站为了辨别用户身份 xff0c 进行Session跟踪而储存在用户本地终端上的数据 xff08 通常经过加密 xff09 xff0c 由
  • alembic 命令的使用

    初始化 alembic init alembic 查看历史head alembic span class token function history span span class token operator span span cla
  • centos 6 镜像源不再可用

    2020 12 02 centos 停止更新centos 6 xff0c 官网镜像源不可用 http mirror centos org centos 6 6 readme This directory and version of Cen
  • Linux安装配置vnc

    1 检测 vnc有没有安装 rpm qa grep tigervnc 或 rpm qa grep vnc 显示如下信息 xff0c 证明 vnc已经安装 1 1 若未安装 xff0c 安装步骤如下 1 1 1 cd 到 vnc 安装包目录下
  • shell变量的五种赋值方式

    shell变量的赋值https blog 51cto com u 14881361 2673174 一 直接赋值 格式为 xff1a 变量名 61 变量值 x1f416 直接赋值时禁止在 等号 61 两端添加空格 span class to
  • CommonJS和ES6模块化的区别

    ES6 模块与 CommonJS 模块存在以下差异 xff1a 1 语法上 CommonJS 使用的是 module exports 61 导出一个模块对象 xff0c require file path 引入模块对象 xff1b ES6使
  • bug解决: Cause: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 6; 不允许有匹配 “[xX][mM][lL]“ 的

    Exception encountered during context initialization span class token operator span cancelling refresh attempt span class
  • 云计算基础

    待到秋来九月八 xff0c 我花开后百花杀 数据中心发展阶段企业自建EDCIDC托管 租用云计算三者对比 云计算核心特征云计算参考模型云计算的关键特点按需服务资源池化弹性扩展泛网络访问服务可度量 云计算服务模式云计算技术架构云计算的4个部署
  • 前端npm或yarn装包踩坑——安装超时失败,设置镜像源不生效

    问题描述 xff1a 使用npm或yarn进行安装依赖包时 xff0c 无响应超时 xff0c 随即设置镜像源指向淘宝镜像 xff0c 但始终不生效 问题原因 xff1a 无响应 网络等原因 xff0c 导致npm或yarn装包失败 xff
  • Ubuntu中安装ClamAV防病毒软件

    环境 Ubuntu 16 04 软件安装 ClamAV http www clamav net documents installing clamav 源码链接 http www clamav net downloads productio
  • 使用Windows远程桌面工具来远程连接控制Ubuntu系统

    转载来源 xff1a 使用Windows远程桌面工具来远程连接控制Ubuntu系统 xff1a http www safebase cn article 258275 1 html 介绍 有时需要在实际的电脑上安装Ubuntu的操作系统来搭
  • 软件工程简答题和应用题

    1 简述软件工程过程的含义 目的以及包含的子过程 2 数据字典的作用是什么 xff0c 它有哪些条目 xff1f 3 简述结构化程序设计方法的基本要点 4 简述原型的开发步骤 5 什么是需求规约 xff1f 简述需求规约的基本性质 答 xf
  • MFC用对话框获取输入

    题目 在MFC调用对话框读入数据 xff0c 并在客户区输出 这是 计算机图形学基础教程 的一个习题 xff1a 使用MFC设计一个长方形类CRectangle xff0c 调用对话框读入长方形的长度和宽度 xff0c 在客户区输出长方形的
  • openssl 命令行 sm4 加解密

    sms4 算法标准数据实例 密钥 xff1a 0123456789abcdeffedcba9876543210 明文 xff1a 0123456789abcdeffedcba9876543210 密文 xff1a 681edf34d2069
  • 计算一个神经网络的输出(Computing a Neural Network's output)

    计算一个神经网络的输出 xff08 Computing a Neural Network s output xff09 Note 在编程实现一个神经网络的时候 xff0c 有一个注意点就是我们要记得保存每一步计算出来的 z z z 和 a
  • L2正则化(Regularization)

    正则化 xff08 Regularization xff09 深度学习可能存在过拟合问题 高方差 xff0c 有两个解决方法 xff0c 一个是正则化 xff0c 另一个是准备更多的数据 xff0c 这是非常可靠的方法 xff0c 但你可能
  • OpenCV--图像转化为灰度图、HSV图

    OpenCV 图像转化为灰度图 HSV图 一 灰度图 以下介绍转载自 xff1a https www cnblogs com xiejiulong p 3821620 html 图像灰度值的概念是什么 xff1f 灰度也可以认为是亮度 xf
  • python -- 定义函数 def 后面的 ->,:表示的含义

    python 定义函数 def 后面的 gt xff0c xff1a 表示的含义 gt 常常出现在python函数定义的函数名后面 xff0c 为函数添加元数据 描述函数返回的类型 表示参数的类型建议符 示例 xff1a span clas
  • 解决QT 编译QWebEngineWidgets出现错误Project ERROR: Unknown module(s) in QT: webenginewidgets问题

    解决QT 编译QWebEngineWidgets出现错误Project ERROR Unknown module s in QT webenginewidgets问题 1 确认你的QT版本号为QT5 4 43 xff0c 在此之后的版本Qt
  • C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

    有些成员变量的数据类型比较特别 xff0c 它们的初始化方式和普通数据类型的成员变量有所不同 这些特殊类型的数据类型包括 xff1a 引用 xff08 amp xff09 常量 xff08 const xff09 静态 xff08 stat