static_cast与boost::lexical_cast的区别

5

我试图将一个整数连接到一个已知的字符串中,发现有几种方法可以实现,其中两种方法如下:

int num=13;
string str = "Text" + static_cast<ostringstream*>( &(ostringstream() << num) )->str();

或者我也可以使用boost库的lexical_cast函数:

int num=13;
string str= "Text" + boost::lexical_cast<std::string>(num);

如果我已经知道要进行的转换类型(从intstring),那么使用boost::lexical_cast是否更有效?或者使用static_cast同样有效,而不需要依赖外部库?


在我看来,lexical_cast 更易读。请注意,在 C++11 中也有 std::to_string() - hmjd
在你的第一个例子中,为什么要强制转换为指针? - Konrad Rudolph
@KonradRudolph: 我最初在我的答案中写道转换是不必要的(请参见编辑历史记录),但似乎即使 RHS 是 ostringstream,operator << 也会返回 ostream&。 - Armen Tsirunyan
@Armen 我知道转换 本身 是必要的,但是取地址并转换为 指针 是复杂的。直接转换为引用就可以了。这样更直接,从语法和概念上都更清晰。 - Konrad Rudolph
@KonradRudolph:是的,我猜是这样 - Armen Tsirunyan
1个回答

8
string str = "Text" + static_cast<ostringstream*>( &(ostringstream() << num) )->str();

以下内容翻译:

这段代码难看且不易读。考虑到 lexical_cast 在底层实现上几乎完全是这样做的,因此我们可以明确地说使用 lexical_cast 更好。

然而,在 C++11 中,我们有 to_string 重载函数。

string str = "Text" + to_string(num);

如果你的编译器支持,最好的选择是哪一个。

另请参阅如何在C++中将数字转换为字符串以及反之


需要进行类型转换是因为 ostringstream() << num 的结果是 ostream& 而不是 ostringstream&,所以没有 str() 成员函数。 - Mike Seymour
@MikeSeymour:哦,好的,我没想到。编辑中。 - Armen Tsirunyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接