• class A
    {
    protect:
        A(){}

    public:
        public A* Get_A
        {
            static A* aa=null
            if(aa==null)   aa=new A();         
            return aa;
        }
    }

  • 任何一个函数都不应该把自己的局部变量的指针作为它的返回值。如果想让一个函数不留任何隐患地返回一个指针,只能通过动态分配内存方法。比如下面函数错误:

    char *get_name(){
     char name[100];
     return name;
    }

    return语句后数组将不存在,name所指的地址将可能被用作其他用途,但name所指的地址依然合法。

  • #include <iostream>
    #include <climits>

    bool inRange(int num)
    {
     unsigned long max=ULONG_MAX;
     for(int i=num;i>=1;i--){
      max/=i; 
     }
     if(max<1){
      return false;
     }
     else{
      return true;
     }
    }

    说明:以整数4的阶乘为例:1*2*3*4=24。假设在这台计算机上无符号长整数的最大可取值为20。如果计算20/4/3/2/1,最终结果为0.833。如果无符号长整数的最大可取值为30,30/4/3/2/1=1.25。这意味着最大可取值连续除以某个阶乘里的整数的最终结果小于1,说明这个阶乘不能准确地计算出来(结果超出最大值)。如果连除结果大于1,说明阶乘还在范围之内。