【问题标题】:What is the default access of constructor in c++c++中构造函数的默认访问是什么
【发布时间】:2015-11-21 00:06:47
【问题描述】:

什么是c++中构造函数的默认访问以及为什么

公共的、私有的还是受保护的?

以及如何通过code查看?

【问题讨论】:

  • 构造函数在这方面并不特殊。所有成员都一样。

标签: c++ constructor default public


【解决方案1】:

如果你自己不声明构造函数,编译器总是会为你生成一个public trivial 的。他们还将隐式创建一个公共复制构造函数和复制赋值运算符。

来自 c++ 标准 12.1.5:

如果类 X 没有用户声明的构造函数,则没有参数的构造函数被隐式声明为默认值。隐式声明的默认构造函数是其类的内联公共成员。

12.8.7 和 12.8.11:

如果类定义没有显式声明复制构造函数,则隐式声明。 [...] 隐式声明的复制/移动构造函数是其类的内联公共成员。

终于 12.8.18、12.8.20、12.8.22:

如果类定义没有显式声明复制赋值运算符,则隐式声明一个。 [...] 如果类 X 的定义没有显式声明移动赋值运算符,则将隐式声明 [...]。 隐式声明的复制/移动赋值运算符是其类的内联公共成员。

如果您使用c++11,则不会始终生成移动构造函数。有关详细信息,请参阅第 12.8.20 节。

【讨论】:

  • 现在这是什么?您是说它是公开的,而下面的答案是说它是私有的?您能否也给出一个理由,为什么它是公开的或任何真实的链接或代码?
  • @MuhammadQasim:这个答案的哪一部分说隐式默认构造函数是私有的?
  • @MuhammadQasim 对不起,请告诉我我在哪里说过他们是private
  • @MuhammadQasim 那么你为什么要在我的回答下发布呢?尽管如此,他说一切都是私有的,但构造函数
  • @MuhammadQasim 请将您的评论添加到该特定答案的下方,它将为您提供帮助。
【解决方案2】:

构造函数或任何其他成员没有默认访问权限。在使用关键字class 定义的类中,默认情况下所有成员都是私有的;在使用关键字struct 定义的类中,默认情况下它们是公共的。这包括构造函数。

【讨论】:

    【解决方案3】:

    没有对构造函数的默认访问。当你在类中声明它时,你决定访问是什么。如果您谈论的是由编译器创建的默认构造函数,那么 C++ 标准 12.1.4 具有:

    [...]隐式声明的默认构造函数是其类的内联公共成员。

    【讨论】:

      【解决方案4】:

      C++中构造函数的默认访问是什么,为什么?

      隐式生成的默认构造函数、复制构造函数、移动构造函数、复制赋值、移动赋值和析构函数都隐式声明为public,原因很明显(否则默认情况下所有类型都不是可实例化的、可复制的、可移动的和可破坏的)。

      如果您要声明自己的默认构造函数,那么当然取决于您为其设置的可见性,就像任何其他成员函数一样。

      以及如何通过代码查看?

      如果您的默认构造函数(类型为 T)被声明为 protectedprivate,则以下内容将无法编译:

      T x;
      

      【讨论】:

        猜你喜欢
        • 2014-04-01
        • 2014-03-27
        • 2015-04-11
        • 1970-01-01
        • 1970-01-01
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多