C ++对象实例化-使用空括号实例化对象时调用哪个构造函数

曼苏尔·艾哈迈德·梅蒙

我对用于实例化对象的不同语法感到困惑。

这是我的课:

class Object
{

private:

    int field = 0;

public:

    Object() = default; // Just for testing.
    ~Object() = default; // Just for testing.

    Object( const Object& obj ) = default; // Just for testing.

};

这是主要方法:

int main()
{
    Object b(); // ???
    Object c{}; // default
    Object d = Object(); // default
    Object e = Object{}; // default
    Object f ( Object() ); // ???
    Object g { Object() }; // default
    Object a; // default but avoid
    Object h ( Object() ); // ???
    Object i { Object{} }; // default
    Object j = i; // copy
    Object k( j ); // copy
    Object l{ k }; // copy
    Object m = { l }; // copy
    Object n = ( m ); // copy
    auto o = Object(); // default
    auto p = Object{}; // default
    return 0;
}

我的标记为default没问题copy我只想知道,哪个构造函数是用它来调用的,???因为默认构造函数没有被调用。()可以看出,它初始化有关。

我知道这可能并不重要,但我对此表示怀疑。

谁能帮忙!

songyuanyao

这三个声明都是函数声明,而不是变量定义(如您所料)。

Object b();声明一个名为的函数b,该函数不执行任何操作并返回Object

Object f ( Object() );声明一个名为的函数f,该函数采用一个未命名的参数,其类型为返回且不Object带任何值(即Object()的函数,然后返回Object同样适用于Object h ( Object() );

作为解决方法,Object b();您可以

Object b;
Object b{}; // since C++11

为了Object f ( Object() );你可以

Object f ( ( Object() ) );
Object f ( Object{} );     // since C++11
Object f { Object{} };     // since C++11
Object f { Object() };     // since C++11

有关更多信息,请参见最烦人的解析

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在不调用C ++构造函数的情况下实例化对象

使用构造函数参数实例化类对象与不使用参数C *实例*运算符之间的区别

c ++调用模板构造函数实例化

实例化类对象的客观C错误

实例化和删除对象C ++

类文件中的C ++对象实例化

未知的 c++ 对象实例化语法

C++ 对象实例化内存位置

模板类的实例化对象上的C ++模板元函数

如何在实例化类对象时调用默认函数

构造函数中的实例化对象时的C ++类成员作用域

如何在C ++中使用枚举参数实例化对象?

C ++:使用友善类限制对象实例化

使用C ++中的合成进行对象实例化计算

C ++-如何在另一个类中使用私有构造函数实例化对象

在外部脚本(Unity / C#)中调用函数无法实例化预制对象

用于检查哪个对象实例化函数调用的复杂测试

从类构造函数实例化对象的集合

对象实例化调用构造函数太多次

实例化对象时如何调用父构造函数?

C ++,使用模板实例化存储对象实例的通用节点

C#中的对象实例化之间的区别:将对象存储在引用中与直接调用方法

计算使用LINQ函数实例化的C#对象中的天数

C ++从成员对象访问实例化类的其他成员

用鼠标移动实例化的对象(Visual Studio C#)

实例化后是否可以更改C ++对象的类?

如何防止在C#中实例化对象

C++:实例化没有命名空间的对象

C#中对象实例化左侧的抽象类