我的文章所写内容,都是自己实际编程中遇到的,通常是在遇到这个问题时,在网上搜索或者自己找到解决办法。
有时候,某些问题要花好久才找的到解决方案,因为网上资料较少,也有可能是我搜索能力不强。
写下这些,一是希望能帮助到遇到同样问题的朋友,二是记下之后,再次遇到这些问题,能记得解决办法。
由于平时工作都很忙,所以我的文章大多都只简单的写了方法,没讲解得太详细。
还是希望能够帮助到有需要的朋友们。
我的文章所写内容,都是自己实际编程中遇到的,通常是在遇到这个问题时,在网上搜索或者自己找到解决办法。 有时候,某些问题要花好久才找的到解决方案,因为网上资料较少,也有可能是我搜索能力不强。 写下这些,一是希望能帮助到遇到同样问题的朋友,二是记下之后,再次遇到这些问题,能记得解决办法。 由于平时工作都很忙,所以我的文章大多都只简单的写了方法,没讲解得太详细。 还是希望能够帮助到有需要的朋友们。
使用STL标准模板库之后,编程时已经很少使用数组和指针,相反,多使用序列容器vector代替之。 但事实并不这么理想,在迫不得已的情况下,我们还是会选择使用数组。 这里介绍一下当数组作为类的成员变量时,应该怎么对它(数组)进行初始化。 在类的构造函数中可以使用成员初始化表初始化各个成员变量,这种方法是很受推荐和赞扬的,因为使用成员初始化表中对成员进行初始化和在构造函数体中对成员赋值是不同的,特别对于成员对象,在效率上是很有差别的(对于这一点不清楚的朋友们,可以查看C++ primer ed3 14.5,这里对此不细讲)。 那么,用惯了成员初始化表的朋友们,因为尝到了其甜头,通常在第一次对待成员数组时,都会选择成员初始化表,而这不但不会给我们带来好处,反而让我们碰了一鼻子灰,并且苦恼。 本文想说的就是:类的成员变量不能使用成员初始化表进行初始化,而只能通过在构造函数体中对数组的各个成员进行赋值。
class bb
{
public:
bb() : a[0](0) {} //出现c2059错误
bb(int (&a)[3]) : a[0](a[0]),a[1](a[1]),a[2](a[2]) {} //出现c2059错误
bb(int (&a)[3])
{
this->a = {a[0],a[1],a[2]}; //错误,不能使用初始化表
}
//正确写法:
bb()
{
this->a[0] = 0;
this->a[1] = 0;
this->a[2] = 0;
}
bb(int (&a)[3])
{
this->a[0] = a[0];
this->a[1] = a[1];
this->a[2] = a[2];
}
private:
int a[3];
};