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),接着再看更方便。
好书推荐:《我的剧本世界在自主运行》、《我是舰娘》、《我的师妹是妖女》、《交错世界之学院都市》、《认清现实后,她们开始追夫火葬场》、《好徒儿你就饶了为师伐》、