关于 cout
和 cin
,你基本上是正确的。它们是在 std
命名空间内定义的对象(而不是函数)。以下是它们根据 C++ 标准的声明:
头文件 <iostream>
概要说明
#include <ios>
#include <streambuf>
#include <istream>
#include <ostream>
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
}
::
被称为
作用域限定符。名称
cout
和
cin
在
std
中定义,因此我们必须使用
std::
来限定它们的名称。
类的行为有点像命名空间,因为在类内声明的名称属于该类。例如:
class foo
{
public:
foo();
void bar();
};
名为 foo
的构造函数是名为 foo
的类的成员。它们的名称相同,因为它是构造函数。函数 bar
也是 foo
的成员。
由于它们是 foo
的成员,当从类外引用它们时,我们必须限定它们的名称。毕竟,它们属于那个类。因此,如果你要在类外定义构造函数和 bar
,你需要这样做:
foo::foo()
{
}
void foo::bar()
{
}
这是因为它们被定义在类的外部。如果您没有在名称上加上foo::
限定符,那么您将定义一些新函数在全局作用域中,而不是作为foo
的成员。例如,以下是完全不同的bar
:
void bar()
{
}
因为处于不同的作用域,foo
类中的函数可以与其名称相同。这个 bar
函数位于全局作用域,而另一个 bar
函数则属于 foo
类。
cout
,A
类的成员函数)都在作用域中定义,你必须使用::
来解决作用域(也就是告诉编译器在哪里查找)。 - GManNickG::
前缀可以是命名空间或类。由于main
不是它们中的任何一个(它是一个函数),因此main::printStuff
是不正确的。 - Keith Thompsoncout
和cin
不是函数,它们是对象。 - chris