C++的一道难题 求解释 关于重载运算符的,该如何解决

C++的一道难题 求解释 关于重载运算符的
=、()、[]、->、*

这几个运算符 为什么只能重载为非静态成员函数,为什么不能重载为全局函数或者友元函数?
如果推而广之,只能重载为非静态成员函数的运算符,本身有什么“规律”?
——我所知道的规律之一是,运算符左侧必须是对象。
但这并非铁律
我感觉+=也符合上面的规律:左侧必须是对象

分不多,技术交流吧

------解决方案--------------------
C++标准在本论坛就有下载。自己下了看吧。
有很多东西,就是一个“规定”而已,如果当初规定为另外一种形式,也是完全可以的。
------解决方案--------------------
C/C++ code

#include <iostream>
#include <string.h>
using namespace std;

class String
{
    public:
    String():thesize(0),pc(NULL){}
    String(char *p)
    {
        thesize = strlen(p);
        pc = new char[thesize+1];
        strcpy(pc,p);
        pc[thesize] = '\0';
    }
    char operator [](int i)
    {
        return pc[i];
    }
    ~String()
    {
        if(NULL != pc)
            delete [] pc;
    }
    private:
    int thesize;
    char *pc;
};

int main()
{
    char *p = "hello!!!";
    String ms(p);
    cout << ms[5] << endl;
    return 0;
}