【问题标题】:Related to class of "ctime" library与“ctime”类库相关
【发布时间】:2018-08-14 14:06:52
【问题描述】:
tm time_info= tm();

在这个c++语句中time_infotm类的对象,tm()也表示tm()类的对象。

两者都会调用构造函数,那还需要time_info=tm()吗?

【问题讨论】:

  • 你在问为什么需要分配?即为什么不能写成tm time_info;
  • tm time_info{} 如果您真的想明确表明它是在没有参数的情况下被调用的。

标签: c++


【解决方案1】:
tm time_info= tm();

tm 是结构名称,即您在这一行中定义 的名为time_info 的单个对象的类型tm() 是对名为time_info 的对象的tm 类的构造函数的调用——它用于确保对象已正确初始化。

...tm() 也表示 tm() 类的对象。

tm() 不表示任何对象tm() 不是一个类

构造函数都会被调用,...

不,构造函数将被调用一次,并将初始化对象time_info。这就是 C++ 语法的定义方式:在这一行中没有实际的赋值/复制(这是一种称为 copy elision 的语言功能),事实上,正如所说,没有两个实例开始,只有一个。

【讨论】:

    【解决方案2】:

    这两个语句是等价的:

    tm time_info;
    tm time_info = tm ();
    

    在这两种情况下,tm 类型的对象都在 time_info 中构造(在第二种情况下,copy elision 避免了复制新构造的对象的需要)。

    不要这样做:

    tm time_info ();
    

    因为它将被视为函数声明,请参阅:

    https://en.m.wikipedia.org/wiki/Most_vexing_parse

    另见现场演示:https://wandbox.org/permlink/9XBJMSnYQuSmlmd7

    【讨论】:

      猜你喜欢
      • 2015-01-12
      • 2012-01-31
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 2013-01-12
      • 2012-05-18
      相关资源
      最近更新 更多