2015-05-29 63 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