-1

编辑:将我的问题更改为更有意义的问题

如果我有课:

class A{
public:
     int nr;
     int *a;

     A();
};

A::A(): nr(0), a = new int[10]{}

这 chrases,但如果我有

 A::A(): nr(0) {a = new int[10];}

有用。请向我解释这种行为。

4

3 回答 3

1

nr(0)是数据成员的初始化器nr

{a = new T[10]; }是一个构造函数主体,它在初始化列表中的初始化完成a 为数据成员赋值。

{}是一个空的构造函数体,这意味着构造函数什么都不做(除了 initializenr当然,因为它在初始化列表中)。

a = new int[10]在初始化列表和构造函数主体之间是无意义的,语言的语法不允许这样做。它不应该编译,但是如果你找到了一个接受它的编译器然后它崩溃了,你必须查看那个编译器的文档以获得解释。

于 2012-09-27T11:27:17.047 回答
1

它应该看起来像这样:

template<class T>
class A {
public:
     int nr;
     T *a;
     A();
};

template<class T>
A<T>::A() : nr(0), a( new T[42]) { }
于 2012-09-27T11:28:13.817 回答
0

也不应该编译。正确的方法是这样的:

  • 第一种情况:A::A(): nr( 0 ), a( new int[5] ){}
  • 第二种情况:A<T>::A(): nr( 0 ), a( new T[10] ){}
于 2012-09-27T11:22:53.940 回答