Zapis std::cout od zapisu cout nie różni się niczym. Oczywiście mówimy o przypadku kiedy ktoś korzysta z standardowej przestrzeni nazw zwanej std. Na początku pliku pojawia się linia using namespace std;.
Zacznijmy od tego że język C++ jest językiem pozwalającym na programowanie obiektowe. Obiekty czyli abstrakcyjne byty powstają według przepisu zwanego klasą. Domyślnie każda klasa pozwala na stworzenie wielu obiektów. Klasę można też rozumieć jako przepis na stworzenie nowego typu danych. Klasa może posiadać zmienne zwane polami oraz funkcje zwane metodami. Każda klasa w naszym programie powinna mieć swoją unikalną nazwę. Jest to niestety duże ograniczenie, duże projekty zawierają setki jak, nie tysiące klas. Więc skąd brać unikalne nazwy. Problem ten rozwiązuje właśnie coś takiego jak przestrzeń nazw. Jest to swego rodzaju worek do którego można włożyć wiele klas. W obrębie jednej przestrzeni nazw nazwy klas nie mogą się powtarzać, natomiast nic nie stoi na przeszkodzie by w innej przestrzeni nazwie była klasa o takiej samej nazwie. Zobacz na przykład:
#include <iostream>
using namespace std;
namespace moje1
{
class Klasa
{
public:
Klasa()
{
cout<<"Moja klasa z przestrzeni moja1"<<endl;
}
};
};
namespace moje2
{
class Klasa
{
public:
Klasa()
{
cout<<"Moja klasa z przestrzeni moja2"<<endl;
}
};
};
int main() {
moje1::Klasa A;
moje2::Klasa B;
return 0;
}
Zwróć uwagę, że mamy klasę o tej samej nazwie zarówno w przestrzeni nazw moje1 oraz moje2. Tworząc obiekt musimy najpierw wpisać nazwę przestrzeni, następnie użyć operatora zakresu (::) oraz podać nazwę klasy jakiej obiekt chcemy stworzyć.
Przestrzeń std to standardowa przestrzeń stworzona przez twórców języka C++. Twórcy wrzucili do niej między innymi klasę string pozwalającą na operację na napisach. Nic nie stoi na przeszkodzie by stworzyć sobie własną klasę o nazwie string. W większych programach zaleca się nie stosowanie using namespace std lecz używanie nazwy przestrzeni oraz operatora zakresu. Dzięki temu zapisowi od razu widzimy co jest z jakiej przestrzeni nazw pochodzi, zwiększa ona czytelność kodu.
Dodam że odpowiednikiem przestrzeni nazw w Javie są pakiety.