C++调用无参构造函数
在声明类对象时,如果想调用类的无参构造函数,一般会直接声明,不加括号。举个例子
class Foo { public: Foo() { std::cout << "constructor without arguments called"; } void show(){ std::cout << "show foo"; } } int main() { Foo foo; //运行正常 //Foo foo{}; //运行正常 //Foo foo(); //编译报错 foo.show(); return 0; }
声明为"Foo foo;"时,上述代码可以正常运行;改为"Foo foo();"时,编译时报错;改为"Foo foo{};"时,编译时报错;
原因是,"Foo foo();"会被被编译器当成一个函数声明:无参,返回值为Foo类型,foo会被当成函数地址,后面的"foo.show();"自然无法正确编译。
而使用初始化列表形式的"Foo foo{};"则无此歧义,会正确的调用无参构造函数声明一个Foo类对象,编译正常