注册 登录
编程论坛 C++教室

关于 cout.operator<<("hi");

gz81 发布于 2009-07-27 11:40, 738 次点击
int main()
{
cout.operator<<("hi");

return 0;
}

输出的结果是:0x442000 而不是 hi

就是说,cout.operator<<("hi");跟cout<<"hi"; 不是完全等价的,有谁可以解释一下这是为什么?
1 回复
#2
gz812009-07-27 20:12
网上搜索到的答案:

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提供的成员重载函数,楼主程序中的两行是分别调用了两个不同的函数。
1