第一眼你能看出這是函數聲明嗎

struct Foo
{
	Foo(){}
	Foo(int){}
	void fun(){}
};

int main(void)
{
	Foo a(10);  //語句1
	a.fun();	//語句2
	Foo b();	//語句3
	b.fun();	//語句4
	return 0;
}

上述四個語句,你認爲去掉哪句後,可以通過編譯器?


答案是語句4.

看到Foo b(); 愰忽間感覺這是在使用默認構造函數來定義變量。

其實,這是在main函數內部聲明瞭一個返回值爲Foo類型的函數。該函數的形參列表爲空。函數名爲b

如果想要使用默認構造函數來定義變量b,則應爲 Foo b;

面試陷阱。道理都懂,明白了也就沒什麼了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章