C++ 使用std::stringstream将boost::int64\t大数字转换为字符串。
看到下面的代码,调试和显示转换在iPhone模拟器和设备(4S)上都是成功的,但我想知道它是如何工作的?请参阅,boost::int64\t没有重载函数 如果我使用此函数转换任意boost::int64\t类型,会有任何风险吗?提前谢谢C++ 使用std::stringstream将boost::int64\t大数字转换为字符串。,c++,ios,C++,Ios,看到下面的代码,调试和显示转换在iPhone模拟器和设备(4S)上都是成功的,但我想知道它是如何工作的?请参阅,boost::int64\t没有重载函数 如果我使用此函数转换任意boost::int64\t类型,会有任何风险吗?提前谢谢 std::stringstream mySS; boost::int64_t large = 4294967296889977; mySS<<large; std::string str = mySS.str(); std::stringstre
std::stringstream mySS;
boost::int64_t large = 4294967296889977;
mySS<<large;
std::string str = mySS.str();
std::stringstream mySS;
boost::int64_t large=4294967296889977;
mySS它工作的原因是boost:int64_t
实际上是内置类型的typedef(通常是std::int64_t
中定义的cstdint
或类似的东西),因此它可能最终与long
相同(或类似,取决于平台)。当然有一个重载的stringstream::operator当然,对于boost类型,该语言没有自己的操作符。这就是我们可以重载它们的原因。它工作的原因是,boost:int64_t
实际上是内置类型的typedef(通常是cstdint中定义的std::int64_t
),因此它可能最终与long
相同(或类似,取决于平台),当然还有一个重载stringstream::operator@jogojapan嗯,我想这很有道理,但我不知道。即使没有增压,增压仍然会使操作员过载。此外,cplusplus列表不完整。这里没有提到long-long
和unsigned long
的重载。@chris True--然后,如果boost::int64_t
恰好与内置类型相同,则重载运算符意味着除非以某种方式使重载有条件,否则将出现不明确的重载错误。另外,如果boost:int64\u t
确实与内置类型不同,则重载运算符将涉及非常复杂的代码,或者调用boost::lexical\u cast
执行转换。在该类型转换中,直接调用boost::lexical_cast
可能更好。@jogojapan,是的,我的评论好像它确实是另一种类型,我的观点是,如果是,该语言允许您按自己的方式进行。谢谢你们,您提供的方法更安全。
#include <iostream>
#include <boost/cstdint.hpp>
#include <boost/lexical_cast.hpp>
int main()
{
boost::int64_t i = 12;
std::string s = boost::lexical_cast<std::string>(i);
std::cout << s << std::endl;
return 0;
}