我对用于实例化对象的不同语法感到困惑。
这是我的课:
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
。我只想知道,哪个构造函数是用它来调用的,???
因为默认构造函数没有被调用。()
可以看出,它与初始化有关。
我知道这可能并不重要,但我对此表示怀疑。
谁能帮忙!
这三个声明都是函数声明,而不是变量定义(如您所料)。
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] 删除。
我来说两句