#include<string>
#include<iostream>
using std::cout;
using std::endl;
int zero; //定义
extern int i = 3; //定义
extern int l; //声明
extern int l; //声明,可以多次声明,但定义只能有一个
extern int l; //声明
int main()
{
//数据类型决定了变量所占空间的大小,布局方式,空间所存储值的范围以及变量能参与的运算
//初始化(initialized)是创建变量时赋予某一个初始值
//赋值是把当前变量的值擦除,然后赋予另一个新值
//初始化的几种方式:
int a = 1, b = { 1 }, c(3.14), d{ 1 }; //花括号为 c++11 标准,初始化列表(initialized list),使用该方式初始化内置类型时,如果初始值存在丢失信息的风险,编译器会报错
//int e{ 3.14 }; //conversion from 'double' to 'int' requires a narrowing conversion
//内置类型的变量,定义在任何函数体外,将被初始化为0,而定义在函数内部的不会初始化,其值是未定义的
//初始化每一个内置类型的变量是个好习惯
cout << "zero:" << zero << endl; //0
int unkown;
//cout << "unkown:" << unkown << endl; //Error uninitialized local variable 'unkown' used
//类类型的对象如果没有显式初始化,其值由类决定
std::string strNull;
cout << "strNull:"<< strNull << "!" << endl; //strNull:!
//c++ 支持分离式编译(separate compilation)机制,静态类型(statically type)语言,在编译阶段检查类型,用于判断是否支持要执行的运算,所以在使用某个变量前必须声明其类型
//变量的声明(declaration)规定了变量的类型和名字,使其为程序所知,除此之外,定义(definition)还申请了存储空间,有时还会初始化一个值,从而创建了与名字相关的实体
//extern 关键字前缀表示声明,但如果同时显式初始化一个值则为定义,该行为在函数体内将引发错误
//extern int k = 3; error C2205: 'k' : cannot initialize extern variables with block scope
//标识符(identifier)由字母,数字,下划线组成,不能以数字开头,长度无限制,大小写敏感
//保持一种命名规范,如 google C++ Style:https://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
//域(scope),大多作用域都用花括号分隔,同一个标示符在不同的作用域可能表示不同的实体
//名字的作用域从名字的声明处开始,到所在域末端结束
//已声明的标识符可以在所有内层作用域被识别,并允许内层重新定义外层已有的标识符,还可以通过域操作符访问其他域的标识符
int i = 5, sum = 0;
cout << i << endl; //5,屏蔽了全局变量 i
cout << ::i << endl; //3 访问全局变量 i
for (int i = 0; i != 10; ++i) //重新定义外层已有的 i,不指明域的情况下,循环体内的 i 都是该值
sum += i; //sum 使用的外层 sum
cout << i << " " << sum << endl; //5 45 无法访问内层域内的 i 值, 2个变量都是外层域的
return 0;
}
c++ primer(第五版)笔记 第二章(2) 变量
最新推荐文章于 2024-02-23 13:52:39 发布