Two C++ Basics

 Iostream 库的基础是两种命名为 istream 和 ostream 的类型,分别表示输入流和输出流。流是指要从某种 IO 设备上读出或写入的字符序列。命名空间(英语:Namespace)表示标识符(identifier)的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。 例如,设Bill是X公司的员工,工号为123,而John是Y公司的员工,工号也是123。由于两人在不同的公司工作,可以使用相同的工号来标识而不会造成混乱,这里每个公司就表示一个独立的命名空间。如果两人在同一家公司工作,其工号就不能相同了,否则在支付工资时便会发生混乱。两家公司就是名称空间的概念。using namespace “‘xx’”, 就是释放xx名称空间中的所有标识符。using namespace std 就是释放标准库中的所有标识符。这样后面才能直接使用函数cout, cin 或者其它。如果不这样做,可以使用using std:: cout, or using std::in,这其实是一种愿意被人采用的方式,下面说明原因。using namespace std 能不用就不用。标准C++库(不包括标准C库)中所包含的所有内容(包括常量、变量、结构、类和函数等)都被定义在命名空间std(standard标准)中了。这样释放std中所有标识符,可能增加命名的冲突。 下面举个例子:

#include <iostream> 
using namespace std;

 int string(int a, int b){
     return a+b;
 };

int main()
{
    int count=5;
    cout<< string(3,5) << endl;
    cout << "Hello world!" << count << endl;
    return 0;
}

这个代码不嫩通过编译,因为string是std中的标识符,而这里定义了函数string会与之冲突。如果代码改成下面的形式,则能通过编译。

#include <iostream> 
using std::out;
using std::endl;

 int string(int a, int b){
     return a+b;
 };

int main()
{
    int count=5;
    cout<< string(3,5) << endl;
    cout << "Hello world!" << count << endl;
    return 0;
}

或者 (同一个namespace 名,可以在多处定义)

#include <iostream>
using namespace std;

namespace mystring{
 int string(int a, int b){
     return a+b;
 };
 }

int main()
{
    int count=5;
    cout<< mystring::string(3,5) << endl;
    cout << "Hello world!" << count << endl;
    return 0;
}
Updated: 2015-11-28 — pm9:17

Leave a Reply

  Subscribe  
Notify of