编辑:将我的问题更改为更有意义的内容
如果我有课:
class A{
public:
int nr;
int *a;
A();
};
A::A(): nr(0), a = new int[10]{}
这是短信,但如果我有
A::A(): nr(0) {a = new int[10];}
有效。请向我解释这种行为。
答案 0 :(得分:1)
nr(0)
是数据成员nr
的初始值设定项。
{a = new T[10]; }
是一个构造函数体,在执行初始化列表中的初始化后,为数据成员a
分配值。
{}
是一个空的构造函数体,它意味着构造函数什么都不做(当然,除了初始化nr
之外,因为它在初始化列表中)。
a = new int[10]
是无意义的,语言的语法不允许它。它不应该编译,但是如果你发现一个接受它然后它崩溃的编译器,你将不得不查看该编译器的文档以获得解释。
答案 1 :(得分:1)
看起来应该是这样的:
template<class T>
class A {
public:
int nr;
T *a;
A();
};
template<class T>
A<T>::A() : nr(0), a( new T[42]) { }
答案 2 :(得分:0)
也不应该编译。正确的方法是:
A::A(): nr( 0 ), a( new int[5] ){}
A<T>::A(): nr( 0 ), a( new T[10] ){}