shendaowu
申祷无
采纳率75%
2016-05-24 03:48

为什么在类中定义没有定义默认构造函数的类类型变量通过编译了?

已采纳
class T {
public:
    T(int i) :_i(i) {}
private:
    int _i;
};

class U {
private:
    T t;
};

如果定义了一个构造函数不是就会取消合成的默认构造函数吗?

可以定义不可以赋值是吧?刚才发现
const int ci;
int &ri;
也通过编译了。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 5年前

    语法这么规定的,因为t是成员变量

    如果你写在函数里
    main()
    {
    T t;
    }
    那就报错了。

    点赞 2 评论 复制链接分享
  • zhangxing1008 zhangxing1008 5年前

    那是因为你到现在为止并没有生成类实例,并没有要调用默认构造函数,当你需要调用它的时候,编译器会自动为你调用

    点赞 评论 复制链接分享
  • u010177010 徐小hi 5年前

    你那是声明一个对象,并没有为他分配内存

    点赞 评论 复制链接分享
  • qq423399099 小灸舞 5年前

    通过编译是因为你既没有T类的对象也没有U类的对象
    你在被调用到的函数里任意写上U u;或T t;
    编译就过不去了

    点赞 2 评论 复制链接分享