C++记录

1, a++与++a

 

2,

int a[10] ;

int* p = (int*)(&a + 1 ) ;

&a 是数组指针, 其类型为int (*)[10] ,   &a+1 表示 a + 10 .

a才是&a[0] .

(int*)(&a+1) - (int*)(&a) == 10 

 

3,

在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。

只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。

struct CLS
{
    int m_i;
    CLS(int i): m_i( i ) { }
    CLS()
    {
        CLS( 0 );//不会执行其后的初始化表达式
    }
};

int main(void)
{
    CLS obj;
    cout << obj.m_i << endl;
    return 0;
}    

 

4,

C++中的空类,默认产生哪些类成员函数

class Empty
{
    public:
    Empty(); //缺省构造函数
    Empty(const Empty &); //拷贝构造函数
    ~Empty(); //析构函数
    Empty & operator=(const Empty &); //赋值运算符
    Empty* operator&(); //取址运算符
    const Empty* operator&() const; //取址运算符const
};

 

 

5,

// 功能:由src所指内存区域复制count个字节到dest所指内存区域。
// 说明:src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针
void *memmove(void *dest , const void *src , size_t count)
{
    assert( (dest != NULL) && (src != NULL));     //安全检查
    assert( count > 0 );

    char *psrc = (char *) src;
    char *pdest = (char *) dest;
    //检查是否有重叠问题
    if( pdest < psrc )
    {
        //正向拷贝
        while( count-- )
            *pdest++ = *psrc++;
    }
    else if( psrc < pdest )
    {
        //反向拷贝
        psrc = psrc + count - 1;
        pdest = pdest + count - 1;
        while( count-- )
            *pdest-- = *psrc--;
    }
    return dest;
}

// 功能:由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。
// 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针
void *memmcpy(void *dest , const void *src , size_t count)
{
    assert( (dest != NULL) && (src != NULL));     //安全检查
    assert( count > 0 );

    char *psrc = (char *) src;
    char *pdest = (char *) dest;
    while( count-- )
        *pdest++ = *psrc++;

    return dest;
}

 

  6,

 

7,

posted @ 2014-08-10 23:19  细雨细语  阅读(253)  评论(0编辑  收藏  举报