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

丹麦文

下面的代码可以很好地编译(除非对methoduncall的注释未注释)。

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

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

int main()
{
    S s();
//    s.method();
    return 0;
}
皮特·贝克尔

首先,S s();声明一个名为的函数该函数s不带任何参数并返回type的对象S就像int f();

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

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

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

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章