Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::stringstream将boost::int64\t大数字转换为字符串。_C++_Ios - Fatal编程技术网

C++ 使用std::stringstream将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

看到下面的代码,调试和显示转换在iPhone模拟器和设备(4S)上都是成功的,但我想知道它是如何工作的?请参阅,boost::int64\t没有重载函数

如果我使用此函数转换任意boost::int64\t类型,会有任何风险吗?提前谢谢

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;
}