是否有可能在类定义中创建类的对象,而不使用默认构造函数

Is it possible to create an object of a class, inside a class definition, without using default constructor

本文关键字:默认 构造函数 有可能 定义 是否 创建 对象      更新时间:2023-10-16

是否可以在类定义中创建类的对象,而不使用默认构造函数?

class Vector3D {
public:
Vector3D(int x, int y, int z);
virtual ~Vector3D();
private:
int m_X;
int m_y;
int m_z;
};
class CustomClass {
private:
Vector3D m_Vec(50,50,50); //error
};

是的,这是可以做到的,但是语法是不同的:

class Vector3D {
public:
Vector3D(int x, int y, int z);
virtual ~Vector3D();
private:
int m_X;
int m_y;
int m_z;
};
class CustomClass {
private:
Vector3D m_Vec;
public:
CustomClass(): m_Vec(50,50,50) {}
};
class CustomClass { 
   private: 
     Vector3D m_Vec;
   public:
    CustomClass() : m_Vec(50,50,50) {}
}

在(现在的)c++ 11标准中,您实际上可以使用uniform-initialization非静态数据成员初始化器 (N2756):

class CustomClass {
private:
   Vector3D m_Vec{50,50,50};
};

现在,问题是并不是所有的编译器都支持所有的新特性。特别是gcc 4.7是第一个支持这种初始化形式的gcc版本。