我创建了一个函数来计算3x3行列式。这是它的原型:
double threeDet(array<array<double, 3>, 3> det);
我使用了类数组,因为它看起来比传统数组更安全。我想测试这个函数,所以我把它命名为:
threeDet({ {2, -3, 1}, {2, 0, -1}, {1, 4, 5} });
但是,它会抛出"太多初始化项"的错误
当我将函数更改为
时也发生了这种情况:double threeDet(double det[][3]);
首先初始化数组会引发相同的错误:
array<array<double, 3>, 3> det({ {2, -3, 1}, {2, 0, -1}, {1, 4, 5} });
threeDet(det);
唯一有效的方法是将函数更改为第二个版本,并单独初始化数组:
double det[3][3] = { {2, -3, 1}, {2, 0, -1}, {1, 4, 5} };
threeDet(det);
我想知道我错过了什么,如果有一种方法来初始化,我错过了。
在熟悉带括号的初始化列表及其工作方式之前,有一个很好的经验法则可以遵循:当涉及到std::array
时,将大括号括起来:
threeDet({{ {{2, -3, 1}}, {{2, 0, -1}}, {{1, 4, 5}} }});
std::array
是一个聚合对象,它包含一个类成员:数组本身。所以:
外套大括号构造
std::array
.内部大括号集合构造其类成员数组。
现在,一旦传递了这一部分,就得到了一对大括号,用于构造数组中的每个值。好吧,每个这样的值也是一个std::array
,所以你需要在另一对大括号中初始化它的数组类成员。