网上搜索到的答案:
cout<<"Some
test\n";
调用的是全局的操作符重载ostream&
operator<<(ostream&
os,
char*
str);
cout.operator<<("Some
test\n");
调用的是cout对象的操作符重载ostream&
ostream:perator<<(char*
str);
从设计者角度看,在设计ostream类的时候,不可能知道所有使用ostream类输出的类型,
因此,一个类不应要求ostream类提供用于输出的<<重载。
当你设计了一个新的类时,你不能修改ostream的定义,使它支持你的新类,
你只能提供一个全局的操作符<<的重载,来支持你的类。
所以用于C风格的字符输出的<<操作符是一个全局的<<重载,
而不是ostream提供的成员重载函数,楼主程序中的两行是分别调用了两个不同的函数。