2

在实现Matrix4-class 模板(表示 4 x 4 矩阵)时,我遇到了此类中构造函数的问题。我试图为多维数组(好吧,在这种情况下,二维数组又名矩阵)声明有效的构造函数,但没有这样做。这是我对多维数组的左值和右值引用的构造函数:

Matrix4(T (&matrix_)[4][4]);
Matrix4(T (&&matrix_)[4][4]);

这两种声明似乎都是可以接受的,但是调用采用右值引用的构造函数并不能按预期工作:

// Works:
float matrix__[4][4] = {{0}};
Matrix4<float> matrix1__ = matrix__;

// Does not work:
Matrix4<float> matrix2__ = {
    {0, 0, 7, 0},
    {1, 0, 5, 0},
    {0, 0, 4, 0},
    {0, 0, 0, 2}
};

从一段不起作用的代码中,我收到以下错误:

错误:无法将 '{{0, 0, 7, 0}, {1, 0, 5, 0}, {0, 0, 4, 0}, {0, 0, 0, 2}}' 从 ' ' 到 'Matrix4'

那么,如何为多维数组的右值引用提供有效的构造函数呢?

4

1 回答 1

3

这是因为类没有初始化列表构造函数,{ a, b, c }初始化程序被视为调用具有三个参数的构造函数集abc。因此,为了使您的示例有效,请添加另一个{ ... }导致最外层大括号脱落的原因

Matrix4<float> matrix2__ = {{
    {0, 0, 7, 0},
    {1, 0, 5, 0},
    {0, 0, 4, 0},
    {0, 0, 0, 2}
}};
于 2013-06-28T21:29:18.513 回答