【问题标题】:Passing inline double array as method argument将内联双精度数组作为方法参数传递
【发布时间】:2012-02-03 02:12:14
【问题描述】:

考虑方法

functionA (double[] arg)

我想传递一个双数组内联,比如

functionA({1.9,2.8})

而不是先创建数组再传递,比如

double var[] = {1.0,2.0};
functionA(var);

这可以用 C++ 实现吗?听起来很简单,但无论如何我都找不到关于我的问题的提示,这让我很怀疑:)。

【问题讨论】:

  • 在C++中的方法是通过层次结构存在的虚成员函数

标签: c++ arrays pass-by-value function-parameter


【解决方案1】:

您可以通过std::initializer_list<> 做到这一点

#include<vector>

void foo(const std::initializer_list<double>& d)
{ }

int main()
{
    foo({1.0, 2.0});
    return 0;
}

在指定 -std=c++0x 的 g++ 下编译并为我工作。

【讨论】:

    【解决方案2】:

    这适用于 c++0x

    void functionA(double* arg){
       //functionA
    }
    
    int main(){
        functionA(new double[2]{1.0, 2.0});
        //other code
        return 0;
    }
    

    虽然你需要确保 new 分配的内存在 functionA() 中被删除,否则你会出现内存泄漏!

    【讨论】:

      【解决方案3】:

      您可以在 C++11 中使用 std::initializer_list 来实现。

      void fun(std::initializer_list<double>);
      // ...
      fun({ 1., 2. });
      

      你不能在 C++03 中做到这一点(或者它会涉及到足够多的样板,这将是不可行的)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-19
        • 2020-03-16
        • 1970-01-01
        • 2011-07-07
        • 2021-08-25
        • 2015-04-19
        • 1970-01-01
        • 2016-01-15
        相关资源
        最近更新 更多