2015-05-29 47 views
3

在自定義字符串類中使用隱式string轉換運算符有什麼危險?使用隱式字符串轉換運算符的危險?

class MyString 
{ 
public: 

    ... 

    inline operator string() const { return str; } 

private: 
    std::string str; 
}; 
+0

你想做什麼?看起來你在這裏所做的只是招致額外的開銷,因爲你只是返回相同的字符串。 –

+2

你應該弄清楚你是否真的想要轉換來創建一個字符串的副本。 – juanchopanza

+0

MyString本質上是std :: string的一個包裝,但是它刪除了char *操作符來保護它免受非空終止的char數組的影響。我希望能夠將std :: string更改爲MyString,並在保持向後兼容性的同時獲得該保護。這意味着對std :: string的賦值需要工作。 –

回答

3

隱式轉換的主要「危險」主要是:您可能會得到意外的轉換。

如果你的字符串類在邏輯上可以用作std :: string,我不認爲有問題。

+0

如果它在邏輯上用作std :: string會發生什麼意外的轉換? –

+0

那就是說:如果類可以邏輯地用作std :: string,那麼應該沒有問題 – RedAgito