【问题标题】:Automatically implementing a constructor which calls a specific base class constructor自动实现调用特定基类构造函数的构造函数
【发布时间】:2015-03-15 11:46:47
【问题描述】:
class A
{
    A(int a);
};

class B : public A
{
    using A::A; // Shorthand for B(int b) : A(b) {}?
};

int main()
{
    B b(3);

    return 0;
}

是否有某种方法可以完成上述程序的目标(使 B 具有与基类具有相同参数的构造函数)?这是正确的语法吗?

如果是,它是 C++11/14 的特性,还是可以在 C++03 中完成?

【问题讨论】:

标签: c++


【解决方案1】:

是否有某种方法可以完成上述程序的目标(使 B 具有与基类具有相同参数的构造函数)?

是的,有。使用继承构造函数

using A::A;

这是正确的语法吗?

是的。

如果是,它是 C++11/14 的特性,还是可以在 C++03 中完成?

此功能是在 C++11 中引入的。在 C++03 中无效。

有关详细信息,请参阅此 using declaration 参考的相关部分。

【讨论】:

  • 请注意,这在 VS2013 中编译,但实际上并没有做任何事情 (VS14 finally got around to implementing them)。
  • 哈哈,我需要这个才能在 VS2010/12/13 中工作,更不用说一些旧的 HP-UX/AIX 编译器了,所以我想这对我来说是不行的。
【解决方案2】:

是的,完全一样(一旦我清理了你不相关的错误):

struct A
{
    A(int a) {}
};

struct B : A
{
    using A::A; // Shorthand for B(int b) : A(b) {}?
};

int main()
{
    B b(3);
}

(live demo)

这些被称为继承构造函数,自 C++11 以来是新的。

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 2016-07-19
    • 2018-07-21
    • 2018-07-16
    • 2012-10-21
    • 2020-11-28
    • 2015-08-18
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多