关于构造函数之后的冒号:
构造函数后面跟冒号,就相当于:
系统创建成员变量并且初始化。也就是系统为成员变量分配了一块内存并且把相应的数据给填了进去。而构造函数里面调用等于号的方式是分配好后再进行赋值,多了一个步骤。
class Action {
public:
Action() : file_act_(nullptr),
buf_act_(nullptr) {
}
};
友元函数
解释是:类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
亦即通过在类的声明里定义了一个友元函数,它再在外面实际定义时就可以直接访问内部私有变量。
关于C++11/14
C++11/14特性里面有很爽的几点,其中最大的特点就是加入了auto
关键字,用于自动判断变量类型。还有就是对于循环所有变量,加入了如同python中in xxxx
一样的特性:
for (auto &&keyword : keywords) {
//内部处理
}
C++的这些特性,感觉真是一门时时更新的语言。
string::npos
string::npos作为string的成员函数的一个长度参数时,表示“直到字符串结束(until the end of the string)
new、delete 与指针
在C++中,操作符new 用于申请内存,操作符delete 用于释放内存。在C 语言中,函数malloc 用于申请内存,函数free 用于释放内 存。由于C++兼容C 语言,所以new、delete、malloc、free 都有可能一起使用。new 能比malloc 干更多的事,它可以申请对象的内存,而malloc 不能。C++和C 语言中的指针威猛无比,用错了会带来灾难。对于一个指针p,如果是用new申请的内存,则必须用delete 而不能用free 来释放。如果是用malloc 申请的内存,则必须用free 而不能用delete 来释放。在用delete 或用free 释放p 所指的内存后,应该马上显式地将p 置为NULL,以防下次使用p 时发生错误。示例程序如下:
void Test(void)
{
float *p;
p = new float[100];
if(p==NULL) return;
…// do something
delete p;
p=NULL; // 良好的编程风格
// 可以继续使用p
p = new float[500];
if(p==NULL) return;
…// do something else
delete p;
p=NULL;
}