请参阅以下代码,调试和显示转换在iPhone模拟器和设备(4S)上都是成功的,但我想知道它是如何工作的?请参阅http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/,没有boost :: int64_t的重载函数。
如果我使用此函数转换任意boost :: int64_t类型会有任何风险吗?提前致谢。
std::stringstream mySS;
boost::int64_t large = 4294967296889977;
mySS<<large;
std::string str = mySS.str();
答案 0 :(得分:2)
它起作用的原因是boost:int64_t
实际上是内置类型的typedef(通常std::int64_t
中定义的cstdint
或类似的东西),所以它可能最终成为与long long
相同(或类似,取决于平台)。当然,stringstream::operator<<
有一个超载。
对于确切的定义,最好看boost/cstdint.hpp
(1.51版本)。
假设这通常适用于所有主要平台,这可能是一个相对安全的赌注。但我怀疑任何人都能为此提供保证。
如果使用std::stringstream
的目的是在整数和字符串之间进行转换,那么最安全的做法就是使用Boost自己的转换方式:boost::lexical_cast
(1.51版本)。以下是它的完成方式:
#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;
}