static_cast 与 boost::lexical_cast

Posted

技术标签:

【中文标题】static_cast 与 boost::lexical_cast【英文标题】:static_cast vs boost::lexical_cast 【发布时间】:2013-07-22 15:03:38 【问题描述】:

我正在尝试将一个整数连接到一个已知字符串,我发现有几种方法可以做到这一点,其中两种是:

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

或者我也可以使用boostlibraries'lexical_cast

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

由于我已经知道转换类型(intstring),使用boost::lexical_cast 是否更有效?还是static_cast 一样有效,无需依赖外部库?

【问题讨论】:

IMO, lexical_cast 更具可读性。注意c++11中还有std::to_string() 在您的第一个示例中,为什么要转换为 指针 @KonradRudolph:我最初写的演员在我的回答中是不必要的(请参阅编辑历史记录),但似乎运算符 @Armen 我知道演员 itself 是需要的,但是获取地址并转换为 pointer 是复杂的。只是投给参考。这在句法和概念上都更直接。 @KonradRudolph:是的,我猜 【参考方案1】:
string str = "Text" + static_cast<ostringstream*>( &(ostringstream() << num) )->str();

这是丑陋的,不容易阅读。再加上 lexical_cast 在下面几乎完全做到了这一点,我们可以肯定地说使用 lexical_cast “更好”。

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

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

如果您的编译器支持,哪个是最佳选项。

另见How to convert a number to string and vice versa in C++

【讨论】:

需要演员表,因为ostringstream() &lt;&lt; num的结果是ostream&amp;而不是ostringstream&amp;,所以没有str()成员。 @MikeSeymour:哦,好吧,没想到。编辑

以上是关于static_cast 与 boost::lexical_cast的主要内容,如果未能解决你的问题,请参考以下文章

基本类型的 static_cast<T> 与 T(n)

dynamic_cast 与 typeid

c++中4个与类型转换相关的关键字分析

static_cast 用法

static_cast 用法

为啥 static_cast 需要指针或引用?