關於 if(類對象) 語法的研究

class Object
{

};

int main(int argc, char *argv[])
{
	Object obj;
	if(obj){
		//do something
	}else{
		//do something else
	}
	return 0;
}

上面這段代碼將會導致編譯錯誤。

要想通過編譯,可以這樣更改

class Object
{
public:
	operator bool()
	{
		return true;
	}
};
或者這樣更改

class Object
{
public:
	operator int()
	{
		return true;
	}
};

或者是

class Object
{
public:
	operator float()
	{
		return false;
	}
};
如果有多個重載呢,比如

class Object
{
public:
	operator bool()
	{
		return true;
	}
	operator int()
	{
		return false;
	}
	operator float()
	{
		return false;
	}
};
這時if(obj)將會調用operator bool()

但是如果只重載operator int()和operator float()呢?

class Object
{
public:
	operator int()
	{
		return false;
	}
	operator float()
	{
		return false;
	}
};
這將導致編譯錯誤。

總結:

1,要使if(obj)通過編譯,obj對象的類必須重載了operator bool或者其它可以轉化爲bool的操作符,比如operator int,char,long,float,double等等。

2,如果重載了operator bool,將會優先調用此重載函數。

3,如果沒有重載operator bool,而又重載了多個可以轉化爲bool 的操作符將會導致編譯錯誤,以爲編譯器不知道選擇哪一個。





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