C++ —— 类中static和const关键字声明变量的初始化方式总结
在类中声明变量/常量时,经常会用到static、const关键字。对于该变/常量的初始化问题,网上有许多相关文章,但是大多不够完善,或者存在错误。经过实际验证,总结如下:
(注明:测试编译平台为VS2015和2010)
class TestClass
{
public:
TestClass()//:a(16)
{
cout << "TestClass Constructor ." << endl;
}
~TestClass()
{
cout << "TestClass Destructor ." << endl; } int temp_a; // = 5;
static int temp_b;
const int temp_c; // = 25;
const static int temp_d; // = 35;
const static float temp_e;
};
int temp_a;
1、在声明处初始化;
2、在构造函数初始化列表中初始化;
对于非static、非const声明的变量,这两种初始化可以同时使用,同时使用时列表中的值会自动覆盖声明处的值。初始化不是必须的,若不进行初始化,其值是不确定的,可简单认为是随机的。该变量属于对象。
static int temp_b;
必须在类的声明体外进行定义(若在定义时不给初值,则编译器自动赋予默认值,int型变量的默认值为0),定义时不使用关键字static。例如:int TestClass::temp_b = 12;
该变量属于类,不属于特定的对象,可以理解为全局的,为所有所实例化的对象所共享。可在程序中通过类名作用域符号的方式访问(如:TestClass::temp_b = 18;),也可以通过对象访问。
const int temp_c;
1、在声明处初始化;
2、在构造函数初始化列表中初始化;
必须初始化,这两种初始化可以同时使用,同时使用时构造函数初始化列表中的值会自动覆盖声明处给的初值。
该常量属于对象,在对象声明时进行初始化,对象声明以后就不能再改变常量的值,即在对象的生存周期内其值不变。
const static int temp_d;//char short int long
1、在声明处初始化;(在声明处初始化,则可以不用在类的声明体外进行定义)
2、在类的声明体外进行定义并初始化;const int TestClass::temp_d = 15;
必须初始化,并且只能有一次初始化赋值(即1和2中,二选一)。char、short、long型静态常量都属于这种情况。
静态常量属于类,为所有的对象共享,既然是常量,初始化以后肯定就不能再有赋值操作。
const static float temp_e; //float double
只能且必须在类的声明体外进行定义和初始化 const float TestClass::temp_e = 0.234f; 静态常量的浮点型数据属于这种情况。
简单总结一下:
1、仅仅有关键字const,由于是常量,就必须进行初始化;可在声明处和构造函数列表中进行初始化,可以二选一,亦可以在这两处都初始化,初始化列表中的赋值会自动覆盖声明处的值。
2、仅仅有static,由于是静态变量,属于类本身,则必须在类的生命体外进行定义(若不给初值,则为默认值)
3,同时又static和const,这两个关键字的前后顺序无所谓,由于是静态常量,即同时具有静态和长常量的属性,使用条件就更加苛刻(即为一个常量,那就必须有初始化,并且还是静态的,那就自然属于类本身了)。整形数据可以在声明处初始化或者在类的声明体外进行定义并初始化,二选一。浮点型数据只能且必须在类的声明体外进行定义并初始化。
仅在VS平台进行了测试,若有不对之处,敬请指正,希望多多交流,共同进步。
C++ —— 类中static和const关键字声明变量的初始化方式总结的更多相关文章
- 类中被final修饰的成员变量需要初始化
类中被final修饰的成员变量需要初始化,否则编译不通过,因为final修饰后不能再赋值,因此必须初始化.
- C++中static和const关键字的作用
static关键字至少有下列几个作用: 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: 在模块内的static全局变量 ...
- PHP5中Static和Const关键字
(1) static static要害字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享, ...
- 【转】C++ 类中的static,const,及引用类型的初始化
文档主要来自:http://blog.csdn.net/yjkwf/article/details/6067267 1. static类型 用static可以为类类型的所有对象所共有,像是全局对象,但 ...
- C++中static、const使用方法简介
众所周知,在c++中,static和const的使用方法是难点,也是重点,值得我们随时温习,所谓温故而知新是也. 下面我们首先说一说static. 1.static的作用 static变量的作用,主要 ...
- C++ 中 static 与 const 的用法及对比
在这个学习过程中我对 static 及 const 的使用时常会混淆,因此整理,加深记忆 一.类的静态成员 如果某个属性为整个类所共有,不属于任何一个具体对象,则采用 static 关键字来声明静态成 ...
- 【C++基础】 类中static private public protected
静态成员在一个类的所有实例间共享数据 “类属性”,是描述类的所有对象共同特征的一个数据项,对所有对象,它的值相同,static定义,为整个类所共有.相对于“实例属性” 如果static成员是私有类型, ...
- javascript中var let const三种变量声明方式
javascript中var let const三种变量声明方式 1.var ①var表示声明了一个变量,并且可以同时初始化该变量. ②使用var语句声明的变量的作用域是当前执行位置的上下文:一个函 ...
- java 类中 static 的使用
在类中 static 主要修饰变量,方法及代码块.大致的执行和使用,据个人理解如下: 1.修饰变量: 在修饰变量时,如 ,表示该变量是静态变量,也可称为类变量.当当前变量是静态变量时,该变量被该类的所 ...
随机推荐
- 超强PHP集成环境,支持800多个不同PHP版本同时运行,无限自定义添加mysql与php版本
转载自今日头条 小编最近发现PHPWAMP竟然又更新了,激动之余向大家介绍一下新版的强大功能. PHPWAMP是纯绿色集成环境,高版本php无需安装VC运行库,默认已经集成VC运行库!Nginx支持服 ...
- December 15th 2016 Week 51st Thursday
At the touch of love everyone becomes a poet. 每一个沐浴在爱河中的人都是诗人. You call your love as your sweetheart ...
- Centos 安装 Oracle Java JDK
Centos 安装 jdk 创建目录,用来存放下载的 JDK cd /usr/local mkdir -p tools cd tools 下载JDK,后边的下载地址你可以到 orcal 官网去获取最新 ...
- 对volatile不具有原子性的理解
在阅读多线程书籍的时候,对volatile的原子性产生了疑问,问题类似于这篇文章所阐述的那样.经过一番思考给出自己的理解. 我们知道对于可见性,Java提供了volatile关键字来保证可见性.有序性 ...
- oracle 查看主外键约束
select a.constraint_name, a.table_name, b.constraint_name from user_constraints a, user_constraints ...
- vue2.* 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点 04
<template> <div id="app"> <!-- 双向数据绑定(必须在表单里面使用) m:model v:view mvvm:model改 ...
- [Python WEB开发] 使用WSGI开发类Flask框架 (二)
WSGI Web服务器网关接口 WSGI主要规定了Web服务器如何与Web应用程序进行通信,以及如何将Web应用程序链接在一起来处理一个请求. wsgiref Python中的WSGI参考模块 ...
- selenium + python自动化测试unittest框架学习(三)webdriver元素操作(二)
上一篇是元素的定位,那么定位元素的目的就是对元素进行操作,例如写入文本,点击按钮,拖动等等的操作 (1)简单元素操作 简单元素操作 find_element_by_id("kw") ...
- iOS获取当前连接的wifi信息
导入框架CaptiveNetwork #import <SystemConfiguration/CaptiveNetwork.h> 获取当前连接的wifi信息 // 只能获取当前的SSID ...
- python文件操作指令
原文地址:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html 常用的文件操作指令: python中对文件.文件夹(文件操 ...