Item2 用而不用

Item2 <iostream>而不用<stdio.h>

Prefer <iostream> to <stdio.h>.

(type safety and extensibility weaknesses of printf/scanf are the strengths of operator>> and operator<<. )

int i;
Rational r;                           // r is a rational number
...
cin >> i >> r;
cout << i << r;

printf/scanf是不安全的,这些缺点正是<<操作符和>>操作符的长处。上面的代码运行的前提是为类Rational实现<<操作符和>>操作符,否则的话会出错。并且,如果一个<<操作符对应有多个函数体,编译器会自动选择。

另外<<操作符和>>操作符的读写参数是同一类型,而Scanf的读写参数是不同类型。一个典型的<<操作符函数如下

class Rational 
{
public:
  Rational(int numerator = 0, int denominator = 1);
  ...
private:
  int n, d;    // numerator and denominator
friend ostream& operator<<(ostream& s, const Rational& r);
};
ostream& operator<<(ostream& s, const Rational& r)
{
  s << r.n << '/' << r.d;
  return s;
}

有些细微而重要的地方,一个是<<操作符函数不是类的成员函数(Item19)。另一个是传给<<操作符函数的是Rational对象的引用而不是一个对象(Item22),同理>>操作符也一样。

有些情况下,还是需要使用stdio.h, 首先相对C库内的stdio.h,实现<<操作符和>>操作符并不高效。Item23的一些特殊的应用还是使用了stdio.h. 还有,在iostream库中实现了构造函数而在stdio.h中没有。有些时候使用stdio.h只是任意性和简单。

#include<iostream><iostream.h>的差别,前者得到std命名空间下的所有iostream的所有元素,后者是在整个全局空间内得到iostream的所有元素,这样可能会导致命名空间冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值