gpt4 book ai didi

c++ - 使用 std::stringstream 将 boost::int64_t 大数转换为字符串。

转载 作者:行者123 更新时间:2023-11-30 04:23:53 29 4
gpt4 key购买 nike

看到下面的代码,在iPhone模拟器和设备(4S)上debug和show convert都是成功的,但是我想知道它是如何工作的?参见 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();

最佳答案

它起作用的原因是 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;
}

关于c++ - 使用 std::stringstream 将 boost::int64_t 大数转换为字符串。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132235/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com