C、C++易错知识点杂记(1)

const char *p、char const *p和char *const p有什么区别?

前两个可以互换。它们声明了一个指向字符常量的指针(这意味着不能改变他所指向的字符的值);“char *const p”声明了一个指向(可变)字符的指针常量,也就是说不能修改指针。

char *(*pfpc)();

遵循“声明模仿使用”原则逐步分解声明;注:[ ]和( )比 * 的结合度更紧。

*(*pfpc)()     是一个   char;

(*pfpc)()      是一个    指向char的指针;

(*pfpc)         是一个    返回char型指针的函数;

pfpc             是一个     指向返回char型指针的函数的指针。

C++中struct和class的区别

在C++中struct和class除了以下两点并无本质区别:

  1. 默认继承权限:struct默认为public继承;class默认为private继承。
  2. 默认成员访问属性:struct默认成员是public的;class默认成员时private的。

不用第三块内存交换两个数

void swapInt(int &a, int &b)
{
        a+=b;
        b=a-b;
        a=a-b;
} 

下面代码的输出结果

class A {
public:
        A(){ num_++;  cout << num_<< endl; } 
        ~A(){ num_--; cout << num_<< endl; } 

        static int num_;
};

int A::num_ = 0;

A fun(A a) {
        return a;
}

int main()
{
        A a1;   
        A a2 = fun(a1); 
}
输出结果:
1
0
-1
-2

解析:A a1; 处调用默认构造函数,使的num_++。随后按值传参时调用默认拷贝构造函数,无num_++,a退出fun函数作用域时,析构调用num_--。声明a2时,调用拷贝构造函数,无num_++,a2,a1退出作用域,调用析构函数,使得num_--。故是如上输出结果。

确保类总是动态分配实例

确保类总是动态地创建实例的一种办法是将析构器移动到类的有区域。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值