例如这样的一个类:
class myMatrix {
public:
myMatrix(int row,int col);
private:
int row;
int col;
double *pData;
};
有没有办法实现如下样子的赋值?
myMatrix m(3,3) = {
1,2,3
4,5,6
7,8,9
};
例如这样的一个类:
class myMatrix {
public:
myMatrix(int row,int col);
private:
int row;
int col;
double *pData;
};
有没有办法实现如下样子的赋值?
myMatrix m(3,3) = {
1,2,3
4,5,6
7,8,9
};
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答840 阅读
1 回答914 阅读
1 回答949 阅读
1 回答715 阅读
1 回答816 阅读
有两种方法,一是使用参数为
std::initializer_list
的构造函数和/或赋值运算符,二是这个类满足 aggregate class 的条件。方法一
使用参数为
std::initializer_list
的构造函数和/或赋值运算符,任意类都可以使用这个方法。例如:方法二
类满足 aggregate class 的条件,则自动可以使用大括号列表来初始化类的成员。
例如下面的类满足 aggregate class 的条件:
所以可以如下初始化:
一个类是 aggregate class 的条件是:
所有的非常量数据成员(non-static data member)是公有的(
public
)没有定义任何构造函数(但可以使用
= default
或= delete
)没有基类
没有虚成员函数
没有类内初始化(C++14后废除)
所以,题主的类肯定不符合这个条件。