const char *p、char const *p和char *const p有什么区别?
前两个可以互换。它们声明了一个指向字符常量的指针(这意味着不能改变他所指向的字符的值);“char *const p”声明了一个指向(可变)字符的指针常量,也就是说不能修改指针。
char *(*pfpc)();
遵循“声明模仿使用”原则逐步分解声明;注:[ ]和( )比 * 的结合度更紧。
*(*pfpc)() 是一个 char;
(*pfpc) 是一个 返回char型指针的函数;
pfpc 是一个 指向返回char型指针的函数的指针。
C++中struct和class的区别
在C++中struct和class除了以下两点并无本质区别:
- 默认继承权限:struct默认为public继承;class默认为private继承。
- 默认成员访问属性: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_--。故是如上输出结果。
确保类总是动态分配实例
确保类总是动态地创建实例的一种办法是将析构器移动到类的私有区域。