C ++:派生类隐式调用显式构造函数

igagis

为什么使构造函数显式显示并不能阻止派生类隐式调用它?

class A{
public:
    explicit A(){}
};

class B : public A{
public:
    B(){ //Constructor A() is called implicitly

        //...
    }
}

我在程序中遇到了这种情况,当时我宁愿遇到编译器错误,也可以节省很多时间来查找错误。现在,我将A的默认构造函数更改为接受一个虚拟的“ int”参数来实现这一点,但是“ explicit”关键字是否不应该这样做?

g ++-4.8编译以上代码,没有任何错误或警告。

马可·A

您对explicit关键字的假设是错误的

explicit关键字并不意味着阻止构造从派生类中被调用,而是防止隐式转换像一个样品在这里:https://stackoverflow.com/a/121163/1938163

我在这里总结相关部分:

class Foo
{
public:
  // single parameter constructor, can be used as an implicit conversion
  Foo (int foo) : m_foo (foo) 
  {
  }

  int GetFoo () { return m_foo; }

private:
  int m_foo;
};

由于最多有一个隐式转换可以解决歧义,因此如果您有

void DoBar (Foo foo)
{
  int i = foo.GetFoo();
}

以下是合法的:

int main ()
{
  DoBar (42); // Implicit conversion
}

这正是显式关键字起作用的地方:禁止上述情况。

为了解决你的问题,为了防止被用作一个基类类,只是标记与构造最后,如果你正在使用C ++ 11(http://en.wikipedia.org/wiki/C++ 11#Explicit_overrides_and_final

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++隐式和显式继承构造函数调用

来自分类Dev

C++11:我可以显式调用基类析构函数来销毁派生类吗?

来自分类Dev

C ++ 11:默认构造函数:隐式还是显式?

来自分类Dev

C ++为什么基类/结构构造函数不能有多个参数可以从派生隐式调用?

来自分类Dev

C ++隐式转换构造函数调用

来自分类Dev

未调用派生类的c ++ / cli静态构造函数

来自分类Dev

C ++ 11隐式副本构造函数,同时显式实现构造函数

来自分类Dev

C++在初始化类实例时隐式调用类成员的构造函数

来自分类Dev

让隐式派生类构造函数调用基类构造函数

来自分类Dev

C ++派生类构造函数调用基类构造函数错误

来自分类Dev

在派生类 C++ 的构造函数中调用基类的构造函数

来自分类Dev

拦截C ++隐式副本构造函数,或调用其功能

来自分类Dev

为什么C ++隐式调用父默认构造函数?

来自分类Dev

C#中的显式构造函数调用

来自分类Dev

派生类的C ++ CRTP构造函数

来自分类Dev

C ++-派生类构造函数的行为

来自分类Dev

C#-在派生类中调用基类和类构造函数

来自分类Dev

如何在C ++中从基类构造函数调用派生类方法?

来自分类Dev

C ++构造函数隐式类型转换

来自分类Dev

C ++构造函数隐式类型转换

来自分类Dev

C++ 构造函数隐式成员

来自分类Dev

什么是c ++内联显式构造函数?

来自分类Dev

C ++显式复制构造函数?

来自分类Dev

C++显式构造函数的应用

来自分类Dev

c ++-通过抽象模板基类接口指针访问派生类方法,而接口中没有显式类型

来自分类Dev

根据C ++标准,显式调用构造函数和析构函数是否安全?

来自分类Dev

在C ++中从构造函数中显式地调用析构函数是不好的做法吗?

来自分类Dev

显式/隐式类型转换C ++

来自分类Dev

显式/隐式类型转换C ++

Related 相关文章

  1. 1

    C ++隐式和显式继承构造函数调用

  2. 2

    C++11:我可以显式调用基类析构函数来销毁派生类吗?

  3. 3

    C ++ 11:默认构造函数:隐式还是显式?

  4. 4

    C ++为什么基类/结构构造函数不能有多个参数可以从派生隐式调用?

  5. 5

    C ++隐式转换构造函数调用

  6. 6

    未调用派生类的c ++ / cli静态构造函数

  7. 7

    C ++ 11隐式副本构造函数,同时显式实现构造函数

  8. 8

    C++在初始化类实例时隐式调用类成员的构造函数

  9. 9

    让隐式派生类构造函数调用基类构造函数

  10. 10

    C ++派生类构造函数调用基类构造函数错误

  11. 11

    在派生类 C++ 的构造函数中调用基类的构造函数

  12. 12

    拦截C ++隐式副本构造函数,或调用其功能

  13. 13

    为什么C ++隐式调用父默认构造函数?

  14. 14

    C#中的显式构造函数调用

  15. 15

    派生类的C ++ CRTP构造函数

  16. 16

    C ++-派生类构造函数的行为

  17. 17

    C#-在派生类中调用基类和类构造函数

  18. 18

    如何在C ++中从基类构造函数调用派生类方法?

  19. 19

    C ++构造函数隐式类型转换

  20. 20

    C ++构造函数隐式类型转换

  21. 21

    C++ 构造函数隐式成员

  22. 22

    什么是c ++内联显式构造函数?

  23. 23

    C ++显式复制构造函数?

  24. 24

    C++显式构造函数的应用

  25. 25

    c ++-通过抽象模板基类接口指针访问派生类方法,而接口中没有显式类型

  26. 26

    根据C ++标准,显式调用构造函数和析构函数是否安全?

  27. 27

    在C ++中从构造函数中显式地调用析构函数是不好的做法吗?

  28. 28

    显式/隐式类型转换C ++

  29. 29

    显式/隐式类型转换C ++

热门标签

归档