类的数组成员变量的初始化
2015-10-29 13:12
183 查看
使用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];
}
int a[3];
};
from: http://blog.sina.com.cn/s/blog_4d9b6da90100nnj8.html
但事实并不这么理想,在迫不得已的情况下,我们还是会选择使用数组。
这里介绍一下当数组作为类的成员变量时,应该怎么对它(数组)进行初始化。
在类的构造函数中可以使用成员初始化表初始化各个成员变量,这种方法是很受推荐和赞扬的,因为使用成员初始化表中对成员进行初始化和在构造函数体中对成员赋值是不同的,特别对于成员对象,在效率上是很有差别的(对于这一点不清楚的朋友们,可以查看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];
}
int a[3];
};
from: http://blog.sina.com.cn/s/blog_4d9b6da90100nnj8.html
相关文章推荐
- jstack分析 (Thread state=IN_NATIVE) mark
- 【ASC44B】【DP】Braess's Paradox 分阶段思想
- 关于RIP(v1和v2)发送和接受更新的规则
- POJ 2342 Anniversary party
- Java的单例模式
- PHP curl设置请求头信息
- BarCode Reader SDK使用教程:如何从图像中读取条码
- Swap Nodes in Pairs
- JS 数字格式化为金额格式 (3位一个逗号隔开)
- Python BeautifulSoup 实战演练
- 自己写的通过ADO操作mysql数据库
- 互联网金融意味着什么?
- C++类成员和数据成员初始化总结
- 1028. 人口普查(20)
- 《数据结构(严蔚敏版)》学习笔记(二)——合并线性表
- MongoDB项目中常用方法
- RedHat升级Python到2.7.6
- php 解决json_encode中文UNICODE转码问题
- LeetCode Number of Digit One
- RedHat升级Python到2.7.6