将包含数字的数组作为参数传递给C++函数

3

我有一个带有三个参数的构造函数的类。

class Foo{
public: Foo(int, double[], double[]);
};

Foo::Foo(int a, double b[], double c[]){
// function
}

现在我正在尝试使用具有固定数字的数组来调用这个类,例如

Foo(4, [4.1, 2.5, 7.2], [5.5, 6.1, 3.8]);

然而这样不起作用。在C++中是否有可能使用这种语法,还是我需要进行更改。

我尝试通过先声明数组变量来实现:

 double x[5];
 x[0] = 4.1;
 x[1] = 2.5;
 x[2] = 7.2;

 Foo(4, x, x);

这种方法虽然可行,但耗费时间过长,因为我想创建多个这样的类,如果有更好的方法,我的代码会变得更加简洁和高效。谢谢!

3
你是从哪里学到 [4.1, 2.5, 7,2] 是 C++ 数组的写法?如果你没有学过并且仅仅是猜测 C++ 语法,请不要这样做。最好去阅读一本好书。这里有一些推荐。 - YSC
我正在尝试获得与此类似的东西。请先阅读整个问题。 - HaskellPlease
一个 double[] 参数实际上是一个 double* 参数。 - molbdnilo
你可以初始化数组,不需要逐个分配元素——double x[5] = {4.1, 2.5, 7.2}; - molbdnilo
使用 std::array(或 std::vector)。 - Jesper Juhl
3个回答

4

我建议使用标准库容器:

class Foo{
   public:
     Foo(int, const std::vector<double>& vv ) : v(vv) 
     {
       // other stuff here
     }

     std::vector<double> v;
};

您可以使用聚合初始化的方式传递值,如下所示:(了解更多)
int main()
{
    Foo f( 1, {1.1,1.2,1.3} );
}

如果需要编译时固定大小,可以使用std::array


2
在这种情况下,std::initializer_list 是最佳选择。
class Foo{
public:
    Foo(int n, std::initializer_list<double> a, std::initializer_list<double> b);
};

Foo foo { 32, {}, { 2, 3, 1, 2 }};

Live example.


1
使用[]声明列表将无效。但是您可以使用大括号初始化列表
double b[] = {1.0, 2.0};
double c[] = {5.3, 4.7};
Foo f = Foo(1, b, c);

请注意,您不能做到这一点:

但是,请注意,您不能这样做:

Foo f = Foo(1, {1.0, 2.0}, {5.3, 4.7});

为什么?因为初始化列表无法将内联转换为数组。您必须显式声明数组。如果要在内联中执行此操作,请使用std::vector<double>

由于初始化列表无法将内联转换为数组,因此在Foo(int a, double b[], double c[])中,bc实际上是指针而不是数组。如果您在数组上使用const引用(因为无法按值传递数组),则会发生转换:演示 - Jarod42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接