我是c ++的新手。 我见过一些类的例子。 当我创建一个对象并且不必使用consructor创建它时,我很难理解何时必须调用costuctor(whith())。
答案 0 :(得分:2)
在创建C ++对象(类类型)时,始终会调用构造函数。你不能改变它。
假设您有一个默认构造函数(在()
之间不接受任何参数的构造函数),那么它将被调用一些简单的东西
YourClass x;
在这种情况下,使用()
创建对象实际上是一个非常糟糕的主意,因为
YourClass thing();
编译器将此解释为名为thing()
的函数的声明,该函数不接受任何参数,并返回类型YourClass
的值。如果像普通对象实例一样使用thing
,那通常会导致编译错误。
答案 1 :(得分:1)
如果创建了一个对象,则始终会调用其中一个构造函数。
Foo x;
Foo x{};
以上所有语句都会这样做,使用默认构造函数创建一个Foo
对象。请注意,Foo x();
在此上下文中无效,请参阅Peter的回答以解释原因。
如果必须将参数传递给构造函数,或者必须使用 new ,则必须使用括号:
Foo y(42, true);
Foo y{21, false};
Foo* y = new Foo();
Foo* y = new Foo(2, false);
答案 2 :(得分:0)
构造函数在创建对象时总是被调用,它可以隐式调用。
class SomeClass
{
SomeClass() {}
};
SomeClass myObject; // in fact it a: SomeClass myObject = SomeClass();
答案 3 :(得分:0)
如果创建Object,则始终调用构造函数。要么使用圆括号,要么(使用新标准)可以使用花括号。如果你想调用没有参数的构造函数,你可以省略括号,但你仍然会调用构造函数。
不调用构造函数的唯一可能性是使用指针,因为指针只保存对象的内存地址。要实际创建一个对象,您需要使用new
(再次调用构造函数),但如果已经有一个想要指向的对象,则可以在以后完成或者完全跳过。
对于内置类型,您还可以跳过“构造函数”,这会导致单元化变量。
如果你调用的构造函数是你自己定义的构造函数,或者编译器隐式定义的构造函数是另一个问题,那么......