C++primer 2.2 变量--全局与局部

变量

注意:全局变量和局部变量的使用,以及全局变量会被局部变量所覆盖,常考!!!


一、变量

a. 变量提供一个具名的、可供操作的存储空间;
b. c++中每个变量都有其数据类型,数据类型决定着变量所占的内存空间大小和布局方式,该空间能存储的值的范围,以及能够进行的运算。*


  1. 变量定义
  2. 变量列表初始化
    初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值代替。
    初始化的几种方式:
    a. int test=0;
    b. int test={0};
    c. int test{ 0 };
    d. int test( 0 );

  3. 默认初始化
    (一)内置类型初始化
    a. 如果定义变量没有指定初始值,则变量被默认初始化,默认值是什么由变量类型决定,同时定义变量的位置也会有影响。
    b. 如果是内置类型的变量未被显示初始化,它的值由定义的位置决定!!定义在任何函数体之外的变量被初始化为0;
    c. 定义在函数体内部的内置类型变量将不会被初始化。
    d. 未被初始化的内置类型变量值是未定义的,如果试图拷贝或以其他形式访问此类值将引发错误;

    例子:

std::string  global_str;
int global_int;
int main()
{
int local_int;
std::string local_str;
}

// 注意:global_str和local_str的初始值均为空字符串,global_int 初始值为0,local_int没有初始值。

(二)类的初始化 ( 7.7.3节 类的默认初始化)

  类通过定义一个或多个构造函数来控制类对象的初始化。如果一个类有默认构造函数,则无论变量在哪儿定义,默认构造函数都会被调用。

4.变量的声明与定义

a.  C++通过extern关键字声明,向程序表明变量的类型和名字。**因为extern是声明,所以不分配存储空间。**
b.   一个变量可以声明多次,但只能定义一次
c.   如果声明有初始化式,那么它可以被当作是定义,即使有声明标记extern,如:
      extern double pi=3.1415;//定义`

5.标识符

6.名字的作用域
全局变量和局部变量
作用域中一旦声明了某个名字,它所嵌套着的所有作用域中都能访问该名字,同时,允许在内层作用域中重新定义外层作用域已有的名字。
例子:

#include<iostream>
int reused=42;
int main()
{
int unique=0;
std::cout<<reused<<"  "<<unique<<std::endl; //输出42  0
int reused=0;
std::cout<<reused<<"  "<<unique<<std::endl; //局部变量覆盖全局变量,输出0   0
std::cout<<::reused<<"  "<<unique<<std::endl; //使用全局作用域运算符,输出 42  0

return 0;
}

注意:

a. 里面因为全局作用域本身并没有名字,所以当作用域操作符的左侧为空时,向全局作用域发出请求获取作用域操作符右侧名字对应的变量,::reused

b. 局部变量会屏蔽全局变量的值,除非用到全局变量作用域运算符 “: :”。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章