2015-05-10 48 views
0

我在使用sqlapi期間碰到了這個運算符重載,它完全符合我的需求,但我不確定它是如何工作的。我該如何使用這個獨特的運算符重載函數

sqlapi.h

class SQLAPI_API SAString 
{ 
public: 
//stuff 

//! Return pointer to const string 
operator const SAChar *() const; 

//stuff 
} 

,我知道如何使用它是因爲智能感知這並不十分好看的唯一方法:

char* chPointer = SAStringObj.operator const SAChar*(); 

問題:

有沒有更好的方式來調用這個重載操作符?

有人可以剖析這個函數頭告訴我們的函數嗎?

「*運算常量查爾()const的;

+1

'SAString myString; const SAChar * chPointer = myString;' –

回答

3

這是用於轉換到SAStringconst SAChar *隱式轉換運算符。無論何時在期望const SAChar *的上下文中使用SAString,都會隱式調用它(除非它是不明確的)。

void foo(const SAChar *); 

SAString myString("bar"); 

foo(myString); 
const SAChar *myCharPtr = myString; 

可以使用static_cast迫使它在其他情況下:

static_cast<const SAChar *>(myString) 

您可以使用boost::implicit_cast這是safer

boost::implicit_cast<const SAChar *>(myString) 

在C++ 11你可以有一個顯式只有在明確的投射環境中才有效的投射運算符:

explicit operator const SAChar *() const; 

const最後有通常的含義,就像普通的成員函數一樣。

+0

哇,那個答案很完美,回答了我所有的問題。另外,標準的「(const SAChar *)myString」轉換和static_cast之間是否有區別? –

+1

請參閱http://stackoverflow.com/q/332030/1639256 – Oktalist