您的位置:首页 > 编程语言 > C语言/C++

c++ Prime读书笔记2(变量和文字常量的声明和定义)

2007-03-09 15:09 295 查看
变量和文字常量都有存储区并且有相关的类型区别在于变量是可寻址的

addressable对于每一个变量都有两个值与其相关联

1.它的数据值存储在某个内存地址中有时这个值也被称为对象的右值rvalue读做are-value我们也可认为右值的意思是被读取的值readvalue文字常量和变量都可被用作右值

2.它的地址值——即存储数据值的那块内存的地址它有时被称为变量的左值lvalue

读作ell-value我们也可认为左值的意思是位置值locationvalue文字常量不能被用作左值


许多“左值和右值得用法会影响程序的语义行为和性能”的情况,尤其在“向函数传递值”或者“从函数返回值”的时候。


变量的定义会引起相关内存的分配。

声明和定义

声明是一种构造,它引入或者重新引入一个名称到某个作用域zhogn。而且,这种引入通常都包含对所引入名称的一个局部分类,但是,有效的声明并不要求包含被引入对象的细节。

定义,对于“类类型或者函数“的定义,这意味着必须提供一对花括号内部的实体,对于变量而言,进行初始化和不具有extern关键字的声明都是定义。

Intw;//前面没有extern的全局变量的声明,同时也是定义

Externintv;//变量v的声明

Externintv=1;//一个初始化器使之成为定义



对象声明declaration的作用是使程序知道该对象的类型和名字它由关键字extern以及跟在后面的对象类型以及对象的名字构成。C++数据类型不是定义不会引起内存分配实际上它只是说明了在程序之外的某处有这个变量的定义虽然一个程序只能包含一个对象的一个定义但它可以包含任意数目的对象声明比较好的做法不是在每个使用对象的文件中都提供一个单独的声明而是在一个头文件中声明这个对象然后再在需要声明该对象的时候包含这个头文件按照这种做法如果需要修改对象的声明则只需要修改一次就能维持多个使用该对象的文件中声明的一致性


如果一个变量是在全局域中定义的,那么系统会保证为它提供初始值0。

但是如果变量在局部域内定义的,或者是通过new表达式动态分配的,则系统不会向它提供初始值0。这些对象被称为是未初始化的,未初始化的对象不是没有值,而是它的值是未定义的(Undefined)。与它相关联的内存区中存在一个随机的位串,可能是以前使用的结果。


在对象的定义中,当对象的标识符在定义中出现后,对象名马上就是可见的。因此用对象的初始化它自己是合法的,只是这样做不是太明智的。Eg:intbizarre=bizarre;

初始化:

Intmonth=0;

Intmonth(0);

Intmonth=int();//每种内置数据类型都支持这种特殊的构造函数语法,可将对象初始化为0;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: