变量
注意:全局变量和局部变量的使用,以及全局变量会被局部变量所覆盖,常考!!!
一、变量
a. 变量提供一个具名的、可供操作的存储空间;
b. c++中每个变量都有其数据类型,数据类型决定着变量所占的内存空间大小和布局方式,该空间能存储的值的范围,以及能够进行的运算。*
- 变量定义
变量列表初始化
初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值代替。
初始化的几种方式:
a. int test=0;
b. int test={0};
c. int test{ 0 };
d. int test( 0 );默认初始化
(一)内置类型初始化
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;
}