gpt4 book ai didi

C++11 - 如何为多维数组的右值引用提供有效的构造函数?

转载 作者:行者123 更新时间:2023-12-04 04:51:30 24 4
gpt4 key购买 nike

实现 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}
};

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

error: could not convert '{{0, 0, 7, 0}, {1, 0, 5, 0}, {0, 0, 4, 0}, {0, 0, 0, 2}}' from '' to 'Matrix4'



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

最佳答案

那是因为一个类没有初始化列表构造函数,一个 { a, b, c }初始化程序被视为调用带有三个参数的构造函数集,a , bc .因此,为了使您的示例有效,请添加另一个 { ... }这就是最外层牙套剥落的原因

Matrix4<float> matrix2__ = {{
{0, 0, 7, 0},
{1, 0, 5, 0},
{0, 0, 4, 0},
{0, 0, 0, 2}
}};

关于C++11 - 如何为多维数组的右值引用提供有效的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com