c++变量初始化规则

原创 2016年08月29日 21:42:45
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <assert.h>
#include <iostream>
using namespace std;
#define num 10000
class BClass
{
public:
	BClass() : i(1), ci(2), ri(i){} // 对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化
	//普通成员变量也可以放在函数体里,但是本质其实已不是初始化,而是一种普通的运算操作-->赋值运算,效率也低
private:
	int i;                                  // 普通成员变量
	const int ci;                           // 常量成员变量
	int &ri;                                // 引用成员变量
	static int si;                          // 静态成员变量
	static int si2;                 // error: 只有静态常量成员变量,才可以这样初始化
	static const int csi;                   // 静态常量成员变量
	static const int csi2 = 100;            // 静态常量成员变量的初始化(Integral type)    (1)
	static const double csd;                // 静态常量成员变量(non-Integral type)
	//static const double csd2 = 99.9;      // error: 只有静态常量整型数据成员才可以在类中初始化
	static const double csd2;
};

//注意下面三行:不能再带有static
int BClass::si = 0; // 静态成员变量的初始化(Integral type)
const int BClass::csi = 2; // 静态常量成员变量的初始化(Integral type)
const double BClass::csd = 99.9; // 静态常量成员变量的初始化(non-Integral type)

// 在初始化(1)中的csi2时,根据著名大师Stanley B.Lippman的说法下面这行是必须的。
// 但在VC2003中如果有下面一行将会产生错误,而在VC2005中,下面这行则可有可无,这个和编译器有关。
//const int BClass::csi2=100;
int global; //初始化为0
char ch;    //初始化为空字符
int a[5];   //初始化为全零数组
char ch1[5];  //初始化为NULL数组
int main()
{
	BClass b;
	cout << ch << endl;
	cout << sizeof(ch1) << endl;
	cout << sizeof(ch) << endl;
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++变量初始化规则

当定义没有初始化式的变量时,系统有时候会帮我们初始化变量。这时,系统提供什么样的值取决于变量的类型,也取决于变量定义的位置。 内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初...
  • hnzmdzcm
  • hnzmdzcm
  • 2012年06月02日 16:27
  • 543

变量初始化规则

变量初始化规则 ---整理自c++primer 4th version 如有错误,麻烦各位大侠指出 Caution:Uninitialized Variables Cause Run-Time Pro...
  • you1314520me
  • you1314520me
  • 2013年01月22日 11:58
  • 433

C++11中变量初始化方法汇总

1 背景     参考资料[1]提到,在C++语言中,初始化与赋值并不是同一个概念,它是一个异常复杂的问题。因此有必要专门对这个问题进行总结。 2 参考资料 [1]C++ Primer中文版(第5版)...
  • Q1302182594
  • Q1302182594
  • 2015年08月11日 17:14
  • 4730

c++中静态成员变量要在类外部再定义或初始化的原因

,否则产生link2001错误. class testClass {   public:   static int m_i; }; // 类外部定义,若不写会产生 // error LNK2001...
  • icandoit2010
  • icandoit2010
  • 2016年12月09日 17:20
  • 4400

C与C++变量的初始化

C语言的默认初始化值: 1)全局变量存放在全局数据区,由编译器建立,如果在定义的时候不做初始化,系统会将其自动初始化,数值型为0,字符型和指针变量会自动赋值为NULL。静态变量和全局变量类似。而非静态...
  • qq_33774935
  • qq_33774935
  • 2016年09月02日 11:10
  • 311

关于c++ 的静态成员变量为什么一定要初始化

我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。 其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。 两者的区别在于:初...
  • mrailence
  • mrailence
  • 2016年08月31日 19:32
  • 7361

C++ VS中如何用变量初始化数组

也许在别的编译软件中定义一个const int 的变量就可以初始化数组,但我的VS2013中总报错,于是我用的方法是Vector 1.头文件                 #include ...
  • tobbyworks
  • tobbyworks
  • 2017年07月29日 09:04
  • 433

变量初始化规则 ----from c++primer

当定义没有初始化的变量时,系统有时会帮我们初始化变量.这时,系统提供什么样的值取决于变量的类型,也取决于变量定义的位置. 内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化...
  • malina90
  • malina90
  • 2014年10月15日 08:35
  • 206

C语言编程规范之我见——变量初始化

C语言编程规范中,一个争论已久的问题,就是变量是否该在定义时进行初始化。 针对这个问题,谈谈我的个人想法。 相比于变量定义时初始化,本人更倾向于变量按需初始化。 当然,变量按需初始化并不是不要在定义时...
  • hantingmao
  • hantingmao
  • 2017年03月14日 15:00
  • 262

C++静态成员变量的初始化

需要注意的是:静态数据成员不能在类中初始化,一般在类外和main()函数之前初始化,缺省时初始化为0。 1.static成员的所有者是类本身,但是多个对象拥有一样的静态成员。从而在定义对象是不能...
  • h_wlyfw
  • h_wlyfw
  • 2014年03月03日 16:53
  • 5310
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++变量初始化规则
举报原因:
原因补充:

(最多只允许输入30个字)