Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 括号内的初始值设定项列表_C++_Arrays - Fatal编程技术网

C++ 括号内的初始值设定项列表

C++ 括号内的初始值设定项列表,c++,arrays,C++,Arrays,我试图将数据*指针数组传递给函数 void f(int argc, Data** argv) { ... } // at this point, I have Data* x, Data* y initialized f(2, {x, y}); 如果数组定义内联在函数调用中,是否有办法让这样的代码运行?现在,返回的错误是 closure3.cc:15:8: warning: extended initializer lists only available with -std=c++0

我试图将
数据*
指针数组传递给函数

void f(int argc, Data** argv) {
    ...
}
// at this point, I have Data* x, Data* y initialized
f(2, {x, y});
如果数组定义内联在函数调用中,是否有办法让这样的代码运行?现在,返回的错误是

closure3.cc:15:8: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
closure3.cc:15:16: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘Data**’ for argument ‘2’ to ‘void f(int, Data**)’
closure3.cc:15:8:警告:扩展初始值设定项列表仅在-std=c++0x或-std=gnu++0x[默认启用]时可用
closure3.cc:15:16:错误:无法将参数“2”的“”转换为“Data**”转换为“void f(int,Data**)”

是否有某种方法可以内联实例化数组,并且在没有C++0x的情况下可以这样做?提前谢谢

> P>您可能需要考虑使用可变长度参数,这样就不必在内联实例化列表。


如果您真的希望它没有C++11功能,您可以尝试这样做(不是很好的代码,只是为了说明这个想法):

vector InitList(int-first,…)
{
向量arr;
int*p=&first;
而(*(p+1))
{
arr.push_back(*p);
p++;
}
返回arr;
}
int main()
{
F(2,InitList(1,2,3));
}

大括号初始值设定项仅在声明数组变量时可用。所以你不能这样做

从技术上讲,您可以使用函数(注意:这是未经测试的)

但这很难看,有几个原因:

  • 数组最终位于堆上,这实际上是不必要的
  • 每次使用该函数时,您都会要求(轻微)内存泄漏
  • 它需要重载到模拟varargs,或者更改为使用varargs,从而失去类型安全性
  • 如果您特别需要传递对,那么考虑使用<代码> STD::配对< /代码>。这些可以使用

    std::make\u pair
    内联创建


    不过,最终,只使用STL容器或在调用函数之前声明数组变量可能会更容易,以便使用聚合初始化。或者添加<代码> -ST+C++ +0x FLAG.< /P>你是否尝试过在那里听警告并添加“代码> -STD= C++ +0X < /CUT>到你的编译行?强烈建议使用矢量而不是数据**或者如果你不能使用C++,将标签改成“C”。^这很可爱,但是你知道有什么方法可以直接在线吗?还有@cornstales,我试过了。差不多是C99<代码>f(2,(数据**){x,y})是一个复合文字。这不是C++2011 AFAIK的一部分。谢谢你的提示!我最终使用了C++0x并使它正常工作。谢谢
    vector<int> InitList(int first, ...)
    {
        vector<int> arr;
        int *p = &first;
    
        while(*(p + 1))
        {
            arr.push_back(*p);
            p++;
        }
    
        return arr;
    }
    
    int main()
    {
        F(2, InitList(1, 2, 3));
    }
    
    Data ** pair_of_data(Data * x, Data * y)
    {
      Data ** result = new Data*[2];
      result[0] = x;
      result[1] = y;
      return result;
    }