class C 
{
public:
 C() : arr({1,2,3}) //doesn't compile
{}
    /*
    C() : arr{1,2,3} //doesn't compile either
{}
    */
private:
 int arr[3];
};

我认为原因是阵列可以初始化仅与 = 语法,那就是:

int arr[3] = {1,3,4};

的问题

  1. 怎么我可以做我想做的事(那 是, 初始化 一系列中的一个 构造(不分配元素 在体)).它甚至有可能吗?
  2. 不C++03标准说什么特别的初始化的集合体(包括阵列)在构造函数初始?或invalidness上述代码是一个必然结果的其他一些规则?
  3. 做C++0x初列出了解决问题吗?

P.S. 请不要说矢量,提升::阵列,以及他们的优势阵列,这我知道。

有帮助吗?

解决方案

  1. 怎么我可以做我想做的事(那就是,初始化一系列在构造(不分配元素在身体)).它甚至有可能吗?

是的。它使用一个结构,包含一个阵列。你说你已经知道,但我不理解这个问题。这样一来,你 初始化一系列在构造的,没有任务在身体。这是什么 boost::array 不。

不C++03标准说什么特别的初始化的集合体(包括阵列)在构造函数初始?或invalidness上述代码是一个必然结果的其他一些规则?

A mem-初始化使用直接的初始化。和规则的第8条禁止这样的事情。我不是很确定有关以下情况,但是一些编纂者不允许这样做。

struct A {
  char foo[6];
  A():foo("hello") { } /* valid? */
};

看看 这个海湾合作委员会的公关 为进一步的细节。

做C++0x初列出了解决问题吗?

是的,他们这样做。但是你的语法是无效的,我想。你必须使用牙套直接火了列初始化

struct A {
  int foo[3];
  A():foo{1, 2, 3} { }
  A():foo({1, 2, 3}) { } /* invalid */
};

其他提示

C++98不提供直接法的任何东西,但零(或对于非POD要素,值-初始化)的阵列。那你就写 C(): arr() {}.

我的事情罗杰*佩特纪念是错误的关于据称限制的C++0x聚集的初始化,但是我太懒了,看看它,或者检查出来的,没关系,不是吗? 编辑:罗杰说的是"C++03",我误解了它作为"C++0x"。对不起,罗杰。免费得到它了

C++98解决你目前的代码是包裹的阵列中的一个 struct 和初始化从静态定的类型。数据已经居住的地方呢。袖口,它可以是这样的:

class C 
{
public:
    C() : arr( arrData ) {}

private:
     struct Arr{ int elem[3]; };
     Arr arr;
     static Arr const arrData;
};

C::Arr const C::arrData = {{1, 2, 3}};

解决办法:

template<class T, size_t N>
struct simple_array { // like std::array in C++0x
   T arr[N];
};


class C : private simple_array<int, 3> 
{
      static simple_array<int, 3> myarr() {
           simple_array<int, 3> arr = {1,2,3};
           return arr;
      }
public:
      C() : simple_array<int, 3>(myarr()) {}
};
  1. 不,不幸的是。
  2. 你就不能在你所希望的方式,因为它不允许由法(详见下文).你只能使用的构造函数状的初始化,并且,如你所知,这是不适用于初始化中的每一项阵列。
  3. 我相信是这样,因为他们一概而论的初始化过在许多有用方式。但我不知道的细节。

C++03、聚合的初始化仅适用于与语法相似的如下,其中必须是一个单独的声明,并不适合在一个构造函数初始化程序。

T var = {...};

怎么样

...
  C() : arr{ {1,2,3} }
{}
...

?

汇编的现上g++4.8

你想init一系列整数在构造你的?它指向一个静态阵列。

class C 
{
public:
    int *cArray;

};

C::C {
    static int c_init[]{1,2,3};
    cArray = c_init;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top