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.修饰变量: 在修饰变量时,如 ,表示该变量是静态变量,也可称为类变量.当当前变量是静态变量时,该变量被该类的所 ...
随机推荐
- 实现UIView的无限旋转动画(非CALayer动画)
实现UIView的无限旋转动画(非CALayer动画) 效果: 素材: 源码: // // ViewController.m // Animation // // Created by YouXian ...
- Python学习---django重点之视图函数
django重点之视图函数 http请求中产生两个核心对象: http请求:HttpRequest对象,由Django自己创建 http响应:HttpResponse对象,由开发自己创建,必须返回一个 ...
- magento2常见的命令
常见的命令如下: php bin/magento list 查看所有命令列表 ----------------------------moudule相关的参数------------------ ...
- 1、Node.js 我的开始+安装
内容:为什么开始学习node.js,需要安装哪些东西,及其安装过程 node.js的学习是按照菜鸟教程的node.js教程学习,学习这项技术主要是因为需要使用. 需要安装的东西:解释器,IDE(集成开 ...
- Mac Sublime Text 3
安装Package Control安装过程: 使用快捷键 control + ` 或者菜单栏选择View > Show Console安装Package Control参考官方页面.Sublim ...
- Tomcat的免安装配置
Tomcat免安装配置 以下配置说明全部针对免安装版本 基于tomcat的安装目录和运行目录是可以不同的,本文都会进行说明 首先简单介绍一下tomcat的目录结构,一般情况下,tomcat包括以下子目 ...
- Python 模块化 import 语句介绍(一)
用法: import 模块1[,模块2,模块3...] os 顶级模块os.path 非顶级模块as 相当于重命名 import 的本质: 解释器负责模块单独加载,单独初始化,生成一个模块对象,当前作 ...
- mvc數據遷移
在本节中,我们将使用Entity Framework Code First 数据迁移功能将模型类的改变应用到数据库中. 默 认情况下,当我们使用Entity Framework Code First ...
- 修改Xcode工程名称
概述 有的时候需要在现有的项目上面开发一个新的项目,如果新建工程的话,就比较麻烦了,所以一般是直接现有的工程上面直接修改名字步骤如下: 1.修改工程名字 在这里修改完之后,会弹出一个对话框,点击Ren ...
- 推荐一个WPF仪表盘开源控件
前段时间,做服务器端监控系统,为了界面好看,采用WPF.硬件相关监控,比如CPU.内存等,想用仪表盘控件.网上找了很多这种控件,基本上都是第三方商业控件(虽然很漂亮,不过得money...).最后在C ...