【C++程序设计原理与实践 — 读书笔记】:类型安全

【C++程序设计原理与实践 — 读书笔记】

类型安全

每个对象再定义时都会被分配一个类型。
对于一个程序或程序的一个部分,如果使用的对象符合他们规定的类型,那么他们是类型安全的。
但是,存在很多使用方式,导致类型不安全:如:在一个变量没有初始化之前使用它,则认为他不是类型安全的:

int main(){
    double x;               // x 未初始化 

    double y = x;           // x 未定义 => y 未定义
    double z = 2.0 + x;     // x 未定义 => z 未定义
}

记住:初始化变量是一个好习惯,这会为我们减少很多麻烦!!!
类型安全的思想在编写代码时非常重要。

安全类型转换

C++内部提供了一些隐式的类型转换,可以帮助我们做一些明知不可为而为之的事情,当然,这种做法也是更加方便和有效的。
例如:

char c = 'x'; 	//  
int i1 = c; 	// i1 = 120;(字符'x'在ASCII中的数值)
int i2 = 'x';	// i2 = 120;

char c2 = i1;
cout << c << ' ' << i1 << ' ' << c2 << '\n'; // 打印:x 120 x

在这种情况下,一个值总是被转换成一个等价的值,或者一个最接近等价的值(对于 double),那么这些转换就是安全的:
● bool => char
● bool => int
● bool => double
● char => int
● char => double
● int => double

最常用的转换是从 int 到 double,正是由于这种特性,C++允许在表达式中混用 int 和 double:

double d1 = 2.3;
double d2 = d1 + 2;

if(d1 > 0){
    error("d1 is nefative");
}

注:一些计算机中,当一个很大的整数转换成 double 时,我们可能要承受一些精度上的损失。(这种情况并不常见)

不安全类型转换

但是,当我们在进行一些隐性转换时,一个值可以转换成一个与其原始值不相等的值。

int main(){
    int a = 20000;
    char c = a;
    int b = c;
    
    if(a != b){
        cout << "oops!:" << a << "!=" << b << "\n";
    }else{
        cout << "Wow!We have large characters\n";
    }
}

上述这种转换被称为“缩小”转换,用一个较小的对象存储一个较大的值。
当用 char 来存储 int 类型数据时,一个 int 的数据往往都会比一个 char 大,这种情况下,它可以保存一个 int 类型的数据,但是这个值并不能表示为一个 char(一个有效的 char)。
常见的不安全的类型转换:
● double => int
● double => char
● double => bool
● int => char
● int => bool
● char => bool
但是,这些转换是被编译器所接受的,即使他们是不安全的。
常见的问题 1:

double x = 2.7;
……
int y = x; // y = 2

在我们定义 y 时可能忘记了 x 是一个 double,或者我们临时忘记了 double 到 int 转换会截断(总是去掉小数点后的尾数),而不是使用常用的四舍五入。发生的事情完全的可以预测的,但是在int y = x;处没有任何东西能提醒我们信息(.7)被丢掉了。
常见的问题 2:不是所有的 int 都有等价的 char

int a = 1000;
char b = a; // b = -24;(和硬件相关)

char 的取值范围:[-128,127],但是只有 [0,127] 是可以方便移植的。(不同的计算机对于 char 的类型可能不同)

缩少转换的历史问题:

继承于 C 语言,并且有很多代码依赖于缩小转换。这种转换在实际使用中,如果通过合理的限制,这些不安全的转换在一些小的程序中是可管理的,但是在大的程序中可能是错误的来源。

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《C 程序设计:原理实践(基础篇)pdf》是一本介绍C程序设计原理实践的电子书,篇幅为300字。 本书着重介绍了C程序设计的基础知识和实践技巧。首先,书中详细介绍了C语言的基本概念、语法规则和编程思想,包括数据类型、运算符、控制语句、函数等。读者通过学习这些内容,可以了解C语言的基本框架和编程范式,为后续的程序设计打下坚实基础。 同时,本书还通过丰富的实例和案例,帮助读者理解C程序设计实践技巧。例如,介绍了程序的模块化设计思想,如何设计函数和文件结构,以及常见的程序调试和错误处理方法。这些内容对于初学者来说非常有帮助,可以提高编写程序的效率和质量。 此外,本书还详细介绍了C语言的高级特性和应用,如指针、动态内存管理、文件操作等。这些内容对于进一步提高编程能力和解决实际问题非常重要。 综上所述,《C 程序设计:原理实践(基础篇)pdf》是一本系统、全面介绍C程序设计原理实践的电子书。通过学习本书,读者可以全面掌握C语言的基本知识和实践技巧,为进一步学习和应用C语言打下坚实基础。 ### 回答2: 《C程序设计:原理实践(基础篇)pdf》是一本关于C程序设计的教材,旨在帮助读者掌握C语言的基础知识和编程实践技巧。该教材以C语言为基础,通过详细的例子和实践项目,引导读者逐步理解和运用C语言编程。 本教材主要包括以下几个方面的内容: 1. 基本概念与语法:介绍C语言的基本数据类型、运算符、控制流语句等基础知识,并通过多个实例帮助读者熟悉C语言的语法和逻辑。同时,还介绍了一些常用的C库函数,如输入输出函数等。 2. 函数与模块化编程:重点介绍了函数的定义、调用和参数传递等概念,通过实例演示了如何使用函数来解决实际问题。同时,还介绍了如何将程序模块化,以便提高代码的可读性和可维护性。 3. 数组与指针:详细讲解了C语言中的数组和指针的概念及其应用。通过实例和练习,引导读者熟练掌握数组和指针的使用方法,并了解它们在C语言中的重要性。 4. 结构体与文件操作:介绍了结构体的定义和使用,以及如何通过文件操作来实现数据的读写。这一部分内容帮助读者了解如何处理结构化数据,并掌握文件操作的基本方法。 通过学习《C程序设计:原理实践(基础篇)pdf》,读者可以获得系统而全面的C语言编程知识,培养编程思维和解决问题的能力。无论是初学者还是有一定编程基础的读者,都能从中受益,并逐步提升自己的编程能力。该教材的特点是理论与实践并重,通过大量的实例和练习,帮助读者将理论知识运用到实际编程中,从而更好地理解和掌握C语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值