c++变量的初始化

1.普通内置类型变量的初始化

  全局变量和静态变量会自动初始化为0,而在函数体内(当然包括main)的变量不会自动初始化,其值是随机的,所以声明一个变量之后立刻初始化是明智的。

2.类类型变量的初始化

  类类型变量会自动调用默认构造函数初始化。如果该类是派生类,会首先调用基类的默认构造函数。

3.类中内置类型变量的初始化

  类中的内置类型不会自动初始化,需要手动初始化,可以在构造函数中初始化。但构造函数中的语句其实是复制语句,执行的时候会调用默认构造函数和复制构造函数,效率上不如构造函数初始化式。构造函数初始化式的执行顺序是变量的声明顺序,而不是语句顺序,如

class C:
{
public:
    C()
    {
        std::cout<<"No param C construct"<<std::endl;
    }
    explicit C(int n):j(n),i(j)
    {
        std::cout<<"C construct"<<std::endl;
    }
    int i;
    int j;

};

记过j初始化为n,i为随机数,因为安装声明顺序先初始化i,而j此时是随机数,所以i为随机数,而j初始化正常。

4.类中类类型的初始化

  类中类类型会自动调用默认构造函数初始化,和2一样。

c++变量的初始化,布布扣,bubuko.com

时间: 2024-08-02 19:03:34

c++变量的初始化的相关文章

全局结构体变量的初始化以及将结构体变量转换为char类型输出问题

#include<stdio.h> #include<stdlib.h> struct node{ int a; int b; char c; char d; }; /*struct node A; 全局变量不能在这儿进行初始化,令我震惊啊,错误让你迷茫到死 A.a=1; A.b=2; A.c='a'; A.d='c';*/ //struct node A={1,2,'a','c'};但是这种写法可以 1:初始化和赋值不是一个概念. 2:// 在全局空间(即函数体之外)只能执行数据

Java变量方法初始化顺序

面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量, 构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果.这实际上是在考查我们对于继承情况下类的初始化顺序的了解. 我们大家都知道,对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是 (静态变量.静态初始化块)>(变量.初始化块)>构造器. 我们也可以通过下面的测试代码来验证这一点: 父类--静态变量 父类

C++ 怎么让静态变量只初始化一次

童鞋们在学习C++的时候,往往只是按照书本上的原文去强行记忆各种特性,比方说,静态变量只初始化一次.你心中一定在默念:一定要记住,static只会初始化一次云云,希望自己能够记住.告诉你,你为什么总是记不住,因为你没有正真理解静态变量的原理, 所以下面我就来告诉大家它的原理,直接上代码:[code=C/C++]#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]){    int initNum = 3;    for (int

C++自学笔记_特殊的成员变量的初始化方法_《C++ Primer》

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化. 静态成员变量的初始化也有点特别,是在类外初始化且不能再带有static关键字. #include <iostream> using namespace std; class BClass{ public: BClass():i(1),ci(2),ri(i){} /

关于C#中编译器保证变量必须初始化规则猜想

现在两种情况: 第一种情况: using System; namespace Wrox { public class Program { static void Main(string[] args) { int index; if(true) { index = 100; } Console.WriteLine(index); Console.ReadKey(); } } } 第二种情况: using System; namespace Wrox { public class Program

non-local-static 变量的初始化

non-local-static 变量,包括global对象.定义于namespace作用域内的对象,classes内.以及在file作用域内被声明为static的对象,不包括在函数内的static变量.由于c++对不同编译单元non-local-static 变量的初始化顺序没有规定,如果这些non-local-static变量之间存在相互依赖,则被依赖的变量可能没有完全初始化.如 //Month.h class Month { public: ~Month(void); static Mon

成员变量与初始化块

public class A { public int number = 5; { number = 10; } public static void main(String[] args) { A a = new A(); System.out.println(a.number); }} 这段代码的执行结果是a的值是10;下面将初始化块和成员变量交换一下顺序让成员变量在后面 public class A { { number = 10; } public int number = 5; pub

C++成员变量的初始化顺序问题

转载自:http://www.cnblogs.com/lidabo/p/3790606.html ,感谢作者! 问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout << "n1:" << n1 << ", n2: " << n2 <

C++中不同变量的初始化规则

当定义没有初始化式的变量(如int i;)时,系统有可能会为我们进行隐式的初始化.至于系统是否帮我们隐式初始化变量,以及为变量赋予一个怎样的初始值,这要取决于该变量的类型以及我们在何处定义的该变量. 1]内置类型变量的初始化     内置变量是否自动初始化,取决于该变量定义的位置.     ①在全局范围内的内置类型变量均被编译器自动初始化为0. #include<iostream> using namespace std; //全局范围内的部分内部变量 int gi; //被自动初始化为0 f