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

c++ Premier 学习笔记(unit2 变量和基本类型-对象与初始化

2017-07-14 21:12 567 查看
(因为是学习笔记,所以很多地方直接从书上敲在电脑上,所以标记成为“转载”)

术语:何为对象?

       C++程序员在很多场合都会使用对象(object)这个名词。通常情况下,对象是指一块能储存数据并具有某种类型的内存空间。

       一些人仅在与类有关的场景下才使用“对象”这个词。另一些人则已把命名的对象和未命名的对象区分开来,他们把命名了的对象叫做变量。还有一些人把对象和值区分开来,其中对象指能被程序修改的数据,而值指只读的数据。

       本书遵循大多数人的习惯用法,即认为对象是具有某种数据类型的内存空间。我们在使用对象这个词时,并不严格区分是类还是内置类型,也不区分是否命名或是否只读。

 

初始化和赋值?

       在C++语言中,初始化是一个异常复杂的问题,我们也将反复讨论这个问题。很多程序员对于用等号=来初始化变量的方式倍感困惑,这种方式容易让人认为初始化是赋值的一种。事实上在C++语言中,初始化和赋值是两个完全不同的操作。然而在很多编程语言中二者的区别几乎可以忽略不计,即使在C++语言中有时这种区别也无关紧要,所以人们特别容易把二者混为一谈。需要强调的是,这个概念至关重要,我们也将在后面不止一次提及这一点。

warning:

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

 

列表初始化(如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错:)

long double ld=3.1415926536;

inta{ld},b={ld};//错误:转换未执行,因为存在丢失信息的危险

int c(ld),d=ld;//正确:转换执行,且确实丢失了部分值

 

使用long double的值初始化int变量时可能丢失数据,所以编译器拒绝了a和b的初始化请求。其中,至少ld的小数部分会丢失掉,而且int也可能存不下ld的整数部分。

 

默认初始化的问题?

       如果是内置类型的变量未被显示初始化,它的值由定义的位置决定。定义于任何函数体之外的变量会被初始化为0.然而如6.1.1节(第185页)所示,一种例外情况是,定义在函数体内部的内置类型变量将不被初始化(uninitialized)。一个未被初始化的内置类型变量的值是未定义的(参见2.1.2节,第33页),如果试图拷贝或以其他形式访问此类值将引发错误。

 

提示:未初始化变量引发运行时故障

       未初始化的变量含有一个不确定的值,使用未初始化变量的值是一种错误的编程行为并且很难调试。尽管大多数编译器都能对一部分使用未初始化变量的行为提出警告,但严格来说,编译器并未被要求检查此类错误。

       使用未初始化的变量将带来无法预计的后果。有时我们足够幸运,一访问此类对象程序就崩溃并报错,此时只要找到崩溃的位置就很容易发现变量没被初始化的问题。另外一些时候,程序会一直执行完并产生错误的结果。更糟糕的情况是,程序结果时对时错、无法把握。并且,往无关的位置添加代码还会导致我们误以为程序对了,其实结果仍旧有错。

       建议初始化每一个内置类型的变量。虽然并非必须这么做,但如果我们不能确保初始化后程序安全,那么这么做不失为一种简单可靠的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++语言 对象