傳統(tǒng)的C函數(shù)庫中scanf和printf不是類型安全的,另外,scanf/printf系列函數(shù)把要讀寫的變量和控制讀寫格式的信息分開來,這都是很早的用法啦。iostream的cout和cin則相對(duì)高級(jí)的多!因?yàn)轭愋桶踩蛿U(kuò)展性是C++的基石,“《”和“》”也提供操作符重載來輸出、輸入用戶自己定義的數(shù)據(jù)類型,另外,在傳遞讀和寫的對(duì)象時(shí)采用的語法形式也是相同的。
如:
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; }
但是下列情況下會(huì)使用C庫函數(shù):
(1)有些iostream的操作實(shí)現(xiàn)起來比相應(yīng)的C stream效率要低,所以不同的選擇會(huì)給你的程序有可能帶來很大的不同。 (2)在標(biāo)準(zhǔn)化的過程中,iostream庫在底層做了很多修改,所以對(duì)那些要求最大可移植性的應(yīng)用程序來說,會(huì)發(fā)現(xiàn)不同的廠商遵循標(biāo)準(zhǔn)的程度也不同。
(3)iostream庫的類有構(gòu)造函數(shù)而<stdio.h>里的函數(shù)沒有,在某些涉及到靜態(tài)對(duì)象初始化順序的時(shí)候,如果可以確認(rèn)不會(huì)帶來隱患,用標(biāo)準(zhǔn)C庫會(huì)更簡(jiǎn)單實(shí)用。
使用了#include <iostream>, 得到的是置于名字空間std下的iostream庫的元素;如果使用#include <iostream.h>,得到的是置于全局空間
的同樣的元素。在全局空間獲取元素會(huì)導(dǎo)致名字沖突,而設(shè)計(jì)名字空間的初衷正是用來避免這種名字沖突的發(fā)生。
使用了#include <iostream> 后面要接:using namespace std;新的c++庫舍棄了<iostream.h>,你如果include它,編譯器
會(huì)提示你找不到這個(gè)頭文件。