在 c 结构上调用默认构造函数

Dan*_*ish 1 c++ struct extern

下面的代码编译得很好(除非调用method没有注释)。

  1. 为什么允许“调用”默认构造函数?(应该没有)
  2. 为什么成员函数的声明不是错误?

.

extern "C"
{
    struct S
    {
        int some_int;
        void method(){}
    };
}

int main()
{
    S s();
//    s.method();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 6

首先,S s();声明一个名为的函数s,它不接受任何参数并返回一个类型为 的对象S。就像int f();.

其次,这extern "C"与这里无关。它大致用于用 C 编写并从 C++ 调用的函数。这并不意味着“假装这段代码是 C 代码”。

第三,S 确实有一个默认构造函数。编译器生成一个。在这种情况下,它什么都不做,因为没有S需要非平凡初始化的成员。要使用您编写的默认构造函数S s;S s{};.

第四,声明成员函数没问题的原因是C++中的astruct和aclass可以有成员函数。我知道,这听起来像是同义反复,但重要的是要记住 astruct可以拥有成员函数、静态数据privateprotected、 和public成员,就像class. astruct和 a之间的唯一区别class是,默认情况下,类的成员是私有的,而结构的成员是公共的,并且默认情况下,类的基是私有继承的,而结构的基是公开继承的。