std::cout<<s<<endl;
: : 操作符是作用域解析符。它的含義是右操作數的名字可以在左操作數的作用域中找到。std::cout 的意思是說所需名字cin是在命名空間std中定義的。這種符號引用標準庫名字的方式是非常麻煩的。
c++提供了一種簡單的方式來使用命名空間成員,using聲明。這是一種最安全的機制。
#include<string>
#include<iostream>
using std::cin;
using std::endl;
using std::string;
int main(void)
{
string s; //正確。string使用了using聲明
cin>>s; //正確。cin使用了using聲明
cout<<s; //錯誤。cout沒有使用using聲明
std::cout<<s<<endl; //正確。指定了命名空間
system("pause");
return 0;
}
命名空間擴展: 在標準C++以前,都是用#include<iostream.h>這樣的寫法的,因為要包含進來的頭文件名就是iostream.h。標準C++引入了名字空間的概念,并把iostream等標準庫中的東東封裝到了std名字空間中,同時為了不與原來的頭文件混淆,規定標準C++使用一套新的頭文件,這套頭文件的文件名后不加.h擴展名,如iostream、string等等,并且把原來C標準庫的頭文件也重新命名,如原來的string.h就改成cstring(就是把.h去掉,前面加上字母c),所以頭文件包含的寫法也就變成了#include <iostream>。
并不是寫了#include<iostream>就必須用using namespace std;我們通常這樣的寫的原因是為了一下子把std名字空間的東東全部暴露到全局域中(就像是直接包含了iostream.h這種沒有名字空間的頭文件一樣),使標準C++庫用起來與傳統的iostream.h一樣方便。如果不用using namespace std;使用標準庫時就得時時帶上名字空間的全名,如std::cout << "hello" << std::endl;
#include "iostream"與#include<iostream>的區別:前者先在當前目錄找iostream文件,找不到再去系統頭文件路徑找,后者反之。因此,做為一個良好的習慣,在包含系統頭文件時盡量用<>,而在包含自己的工程中的頭文件時用""。