C++Primer之变量概述

51 篇文章 0 订阅
19 篇文章 0 订阅

 变量

变量提供一个具名的、供程序操作的存储空间,C++中的变量都有其数据类型,数据类型决定着变量所占内存空间的大小和布局方式、该空间能存储的值的范围,对C++程序员来说,“变量(variable)” 和“对象(object)” 一般可以互换使用。

定义变量:

类型说明符+一个或多个变量名组成的列表(变量名以逗号分隔,最后以分号结束。)

int sum = 0 , value , // sum, va1ue ,units_sold 都是 int
 units_sold = 0 ; //sum ,units sold 值为0

 

初始值:初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。

double prìce = 109.99 , dìscount = prìce * 0.16 ;

//正确:调用函数applyDiscount,然后用函数的返回值初始化salePrice
    double salePrice = applyDiscount (price, discount) ;

初始化的复杂性:

举例:初始化int

int units_ sold = 0;

int units_ sold = {0} ;

int units_ sold{0};

int units_ sold(0) ;

列表初始化(list itizaion):无论是初始化对象,还是某些时候为对象赋新值,都可以使用这样一组由花括号括起来的初始值。当用于内置类型的变量时,这种初始化形式有一个重要特点:如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错:

    long double ld = 3.1415926536;
    int a{ld},b = {ld};
//错误:转换未执行,因为存在丢失信息的危险
    int c(ld), d = ld;
// 正确:转换执行,且确实丢失了部分值

 

默认初始化:如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”。默认值到底是什么由变量类型决定,同时定义变量的位置也会对此有影响。每个类各自决定其初始化对象的方式。而且,是否允许不经初始化就定义对象也由类自己决定。如果类允许这种行为,它将决定对象的初始值到底是什么。string类规定如果没有指定初值则生成一个空串:

1、内置类型的变量未被显式初始化,它的值由定义的位置决定。

定义于任何函数体之外的变量被初始化为0。

定义在函数体内部的内置类型变量将不被初始化。

 

分离式编译:允许将程序分割为若干个文件,每个文件可被独立编译。为了支持分离式编译,C++语言将声明和定义区分开来。声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而定义负责创建与名字关联的实体。变量声明规定了变量的类型和名字,在这一一点上定义与之相同。但是除此之外,定义还申请存储空间,也可能会为变量赋一个初始值。

声明而不定义(就在变量名前添加关键字extern):

extern int i; // 声明i而非定义主

int j;//声明并定义j

 

定义:extern 语句如果包含初始值就不再是声明,而变成定义。

 extern doub1e pi = 3 . 1416 ; // 定义

在函数体内部,如果试图初始化一个由 extern关键字标记的变量,将引发错误。变量能且只能被定义一次,但是可以被多次声明。

 

静态类型:C++是一种静态类型语言,其含义是在编译阶段检查类型。对象的类型决定了对象所能参与的运算。在C++语言中,编译器负责检查数据类型是否支持要执行的运算,如果试图执行类型不支持的运算,编译器将报错并且不会生成可执行文件。

 

标识符:C++的标识符由字母数字下画线组成,其中必须以字母或下画线开头。标识符的长度没有限制,但是对大小写字母敏感:

//定义4个不同的int变量

int somename, someName, SomeName, SOMENAME ;

 

命名规范:

●标识符要体现实际含义。

●变量名一般用小写字母,如index,不要使用Index或INDEX.

●用户自定义的类名一般以大写字母开头,如Sales_ item.

●如果标识符由多个单词组成,则单词间应有明显区分,如student_ loan 或studentLoan,不要使用studentloan。

 

保留字:

作用域:同一个名字在不同的作用域中可能指向不同的实体。名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。

全局作用域:定义于所有花括号之外,大多数定义在函数体之外的名字拥有全局作用域。一旦声明之后,全局作用域内的名字在整个程序的范围内都可使用。

作用域的嵌套:作用域能彼此包含,被包含(或者说被嵌套)的作用域称为内层作用域,包含着别的作用域的作用域称为外层作用域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值