在c ++中使用toString函数或(std :: string)转换重载

时间:2016-12-17 14:56:23

标签: c++ oop c++11 c++14

我正在写一个我想要转换成字符串的类。

我应该这样做:

std::string toString() const;

或者像这样:

operator std::string() const;

哪种方式更受欢迎?

1 个答案:

答案 0 :(得分:2)

具有"字符串"的类标准库中的表示(例如std :: stringstream)使用.str()作为成员函数来返回文本。如果您希望能够将您的类用于通用代码,最好使用相同的约定(toString是" Javanese "和{{1} }" Sharpish ")。

关于转换运算符的使用,只有当您的类专门设计为与字符串表达式中的字符串交互时才有意义(转换为字符串实际上是"提升",如{{{ 1}}隐含地成为ToString

如果你的班级"降级"转换为字符串(这样做会丢失信息),最好使转换操作符显式(int)。

如果它与字符串语义无关,只需要偶尔转换,请考虑明确命名的函数。

请注意,如果long是变量,则必须考虑其用法的语义:

explicit operator std::string() const

如果您的类与字符串无关,但只需参与I / O,那么请考虑不转换为字符串,而是通过...写入流;

a

这样你就可以......

a.str();       // invoking a member function 
               // mimics std::stringstream, and std::match_results 

to_string(a);  // by means of a free function 
               // mimics number-to-text conversions 

std::string(a) // by means of an explicit cast operator 
               // mimics std::string construction

......甚至可能不需要分配任何与字符串相关的内存。