条款2:尽量用iostream而不用stdio.h

本文详细介绍了从C语言到C++的过渡过程,着重强调了使用<iostream>库相较于<stdio.h>的优点,特别是在输入输出操作上的类型安全性、扩展性和统一性。通过实现Rational类的重载运算符>>和<<,展示了如何更有效地处理复杂数据类型,以及在不同场景下使用iostream库的考虑因素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shifting from c to c++

条款2:尽量用<iostream>而不用<stdio.h>

scanfprintf及其系列的缺点:

1)他们不是类型安全的

2)没有扩展性

3scanf/printf系列函数把要读写的变量和控制读写格式的信息分开来

---------------------------------------------------------------------

scanf/printf的这些弱点正是操作符>><<的强项:

int i;

Rational r;// r 是个有理数

 

...

 

cin >> i >> r;

cout << i << r;

1>><<必须是可以处理Rational类型对象的重载函数(可能要通过隐式类型转换)。实现举例如下面的代码。如果没有实现这样的函数,就会出错(处理int不用这样做,因为它是标准用法)

2)编译器自己可以根据不同的变量类型选择操作符的不同形式,所以不必劳你去指定第一个要读写的对象是int而第二个是Rational

3)在传递读和写的对象时采用的语法形式相同,所以不必象scanf那样死记一些规定。这些完全可以交给C++编译器去做。

class Rational {

public:

        Rational(int numerator = 0, int denominator = 1);

       

        ...

       

private:

        int n, d;// 分子,分母

 

        friend ostream& operator<<(ostream& s, const Rational& );

};

 

ostream& operator<<(ostream& s, const Rational& r)

{

        s<< r.n << '/' << r.d;

        return s;

}

---------------------------------------------------------------------

以下情况使用c stream 更好:

第一,有些iostream的操作实现起来比相应的C stream效率要低

第二,在标准化的过程中,iostream库在底层做了很多修改,所以对那些要求最大可移植性的应用程序来说,会发现不同的厂商遵循标准的程度也不同。

第二,iostream库的类有构造函数而<stdio.h>里的函数没有,在某些涉及到静态对象初始化顺序的时候,如果可以确认不会带来隐患,用标准C库会更简单实用。

---------------------------------------------------------------------

其实没有<iostream.h>这样的东西——标准化委员会在简化非C标准头文件时用<iostream>取代了它。如果使用了#include <iostream>, 得到的是置于名字空间std下的iostream库的元素;如果使#include<iostream.h>,得到的是置于全局空间的同样的元素。在全局空间获取元素会导致名字冲突,而设计名字空间的初衷正是用来避免这种名字冲突的发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值