卧龙小说网> > > 2.2.1节练习

2.2.1节练习

2.2.1节练习

2.2.1节练习

练习2.9:解释下列定义的含义。对于非法的定义,请说明错在何处并将其改正。

(a) std::cin >> int input_value;

(b) int i = { 3.14 };

(c) double salary = wage = 9999.99;

(d) int i = 3.14;

出题思路:本题旨在考查定义于初始化,其中列表初始化是重点也是难点。

(a)是错误的,输入运算符的右侧需要一股明确的变量名称,而非定义变量的语句,改正后的结果是:

int input_value;

std::cin >> input_value;

(b)引发警告,该语句定义了一个整型变量i,但是试图通过列表初始化的方式把浮点数3.14赋值给i,这样做将造成小数部分丢失,是一种不被建议的窄化操作。

(c)是错误的,该语句试图将9999.99分隔赋值给salary和wage,但是在声明语句中声明多个变量时需要用逗号将变量名隔开,而不能直接用赋值运算符连接,改正后的结果是:

double salary wage;

salary = wage =9999.99;

(d)引发警告,该语句定义了一个整型变量i,但是试图把浮点数3.14赋值给i,如果这样做将造成小数部分丢失,与(b)一样是不被建议的窄化操作。

练习2.10:下列变量的初值分别是什么?

std::string global_str;

int global_int;

int main()

{

int local_int;

std::string lacal_str;

}

出题思路:本题旨在考查默认初始化的几种不同情况,如全局变量和局部变量的区别、内置类型和复合类型的区别。

解答:对于string类型的变量来说,因为string类型本身就接受无参数的初始化方式,所以不论变量定义在函数内还是函数外都被默认初始化为空串。

对于内置类型int来说,变量global_int定义在所有函数体之外,根据C++的规定,global_int默认初始化为0;而变量local_int定义在main函数的内部,将不被初始化,如果程序试图拷贝或输出未初始化的变量,将遇到一个未定义的奇异值。

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

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

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

tip:建议初始化每一个内置类型的变量。虽然并非必须这么做,但如果我们不能确保初始化后程序安全,那么这么做不失为一种简单可靠的方法。


普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。

好书推荐:《我的剧本世界在自主运行》《我是舰娘》《我的师妹是妖女》《交错世界之学院都市》《认清现实后,她们开始追夫火葬场》《好徒儿你就饶了为师伐》

目录