网上搜索到的答案:
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提供的成员重载函数,楼主程序中的两行是分别调用了两个不同的函数。