面试总结(变量初始化、整型数范围)

时间:2022-09-05 10:32:42

1. 在全局域中声明的变量会自动初始化为0,如:

    double salary; int day;

2. 如果变量是在局部域中定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0,这些对象被认为是未初始化,其值随机。而变量是类对象会通过缺省构造函数自动初始化。

3. C++支持两种形式的初始化:
    a:使用赋值操作符的显示语法形式。如:intival=1024;
    b:隐式形式,初始值被放在括号中。如:intival(1024);

4. 数组可以显示地用一组数初始化,如:
    const intaray_size=3;
    int ia[aray_size]={0,1,2};

    inta[5] ={0};  //a的各个元素都初始化为0

    如果指定的维数大于给定的元素的个数,没有被显示初始化的元素将置为0。也可以不指定维数值,如:int ia[]={0,1,2};

5. 全局变量的初始化   

    此外也没办法捕捉到全局变量初始化抛出的异常,一般来说要减少全局变量的使用,特别是限制那些要求复杂初始化的全局变量。so:

    a,尽量不用全局变量 
    b,用静态变量,通过访问器进行访问 

    在C语言中,只能用常数对全局变量进行初始化,否则编译器会报错。       
    在C++中,如果在一个文件中定义了int a = 5;要在另一个文件中定义int b = a;的话,前面必须对a进行声明:extern inta;否则编译不通过.即使是这样,int b = a;这句话也是分两步进行的:在编译阶段,编译器把b当作是未初始化数据而将它初始化为0;在执行阶段,在main被执行前有一个全局对象的构造过程,intb = a;被当作是int型对象b的拷贝初始化构造来执行。    
    其实,准确地说,在C++中全局对象、变量的初始化是独立的,如果不是像inta=5这样的已初始化数据,那么就是像b这样的未初始化数据。    
    而C++中全局对象、变量的构造函数调用顺序是跟声明有一定关系的,即在同一个文件中先声明的先调用。对于不同文件中的全局对象、变量,它们的构造函数调用顺序是未定义的,取决于具体的编译器。

6.整型数的范围

   Unsignedint 0~4294967295  //10位  
   int -2147483648~2147483647  //10位
   unsigned long 0~4294967295  //10位
   long -2147483648~2147483647 //10位
   long long的最大值:9223372036854775807    //19位
   long long的最小值:-9223372036854775808   //19位
   unsigned long long的最大值:18446744073709551615 //20位  

   __int64的最大值:9223372036854775807     //19位
   __int64的最小值:-9223372036854775808    //19位
   unsigned __int64的最大值:18446744073709551615   //20位