相关疑难解决方法(0)

何时可以在初始化列表中省略外括号?

编译下面的代码时,我在VC2010中遇到错误C2078.

struct A
  {
  int foo;
  double bar;
  };

std::array<A, 2> a1 = 
  // error C2078: too many initializers
  {
    {0, 0.1},
    {2, 3.4}
  };

// OK
std::array<double, 2> a2 = {0.1, 2.3};
Run Code Online (Sandbox Code Playgroud)

我发现正确的语法a1

std::array<A, 2> a1 = 
  {{
    {0, 0.1},
    {2, 3.4}
  }};
Run Code Online (Sandbox Code Playgroud)

问题是:为什么需要额外的括号a1但不是必需的a2

更新

这个问题似乎并不特定于std :: array.一些例子:

struct B
  {
  int foo[2];
  };

// OK
B meow1 = {1,2};
B bark1 = {{1,2}};

struct C
  {
  struct 
    { 
    int a, b; 
    } …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++-2010 c++11

47
推荐指数
1
解决办法
6797
查看次数

为什么我们不能通过值传递数组?

显然,我们可以将复杂的类实例传递给函数,但为什么我们不能将数组传递给函数呢?

c++ arrays arguments function

45
推荐指数
4
解决办法
4万
查看次数

从c ++中的函数返回数组

我试图从函数返回一个数组:

#include <iostream>

using namespace std;
int* uni(int *a,int *b)
{
    int c[10];
    int i=0;
    while(a[i]!=-1)
    {
        c[i]=a[i];
        i++;
    }
    for(;i<10;i++)
        c[i]=b[i-5];

    return c;
}
int main()
{
    int a[10]={1,3,3,8,4,-1,-1,-1,-1,-1};
    int b[5]={1,3,4,3,0};
    int *c=uni(a,b);
    for(int i=0;i<10;i++)
        cout<<c[i]<<" ";
    cout<<"\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我从main()我的uni()函数传递两个数组.在那里,我创建了一个新的数组c[10],我回到了我的main().在我的uni()功能,我尝试在两个数组合并非负数ab.

但我得到这样的东西作为我的输出.

1 -1078199700 134514080 -1078199656 -1216637148 134519488 134519297 134519488 8 -1078199700 
Run Code Online (Sandbox Code Playgroud)

而当我尝试打印函数中的值时c[10],uni()它会打印正确的值.为什么会这样?这是与堆栈有关的吗?因为我已经尝试过搜索我的这个错误,并且我在stackoverflow上发现了一些地方,它说的是do not allocate on stack但我无法理解它.

如果我全局分配我的数组会变得非常容易,但如果是这种情况那么一切都应该全局声明?为什么我们甚至担心从函数传递指针?(我的书中有一章用于传递指针)

c++ arrays pointers

1
推荐指数
2
解决办法
208
查看次数

标签 统计

c++ ×3

arrays ×2

arguments ×1

c++11 ×1

function ×1

pointers ×1

visual-c++-2010 ×1