我想了解如何在专业级软件中进行类型转换? 请考虑以下转换:
目前我正在将Qt用于我的项目,该项目具有执行这些任务的API。 所以我只想知道人们如何使用标准C ++执行这些转换。 准确性,速度和记忆是各自秩序中的优先事项。
答案 0 :(得分:2)
要使int加倍,您只需执行static_cast<double>(int_value);
从double到int它取决于具体情况,大多数情况下static_cast会这样做,但是,有时您需要对舍入为int的值进行特定控制。为此,您可以使用floor
,round
或ceil
等功能。
对于字符串到任何东西和任何字符串,有几个选项:
snprintf()
- 除非你知道自己在做什么,否则不推荐。准确性很难控制
stringstream
/ istringstream
- 这具有良好的准确性且易于控制
boost::format
- 个人喜爱,请查看文档:{{3}}
就性能而言,我会选择snprintf在某些情况下是最快的,因为它不需要分配。
答案 1 :(得分:1)
第一个通常是隐含的(因为它是促销)。第一个和第二个can be accomplished有一个简单的static_cast
:
double x = 0.123;
int y = 123;
std::cout << static_cast<int>(x) << '\n';
std::cout << static_cast<double>(y) << '\n';
第三个would require一个std::istringstream
:
std::string x = "123.456";
double y;
std::istringstream ss(x);
ss >> y;
第四个would require一个std::stringstream
:
double x = 123.456;
std::stringstream ss;
ss << x;
ss.str(); // your string
答案 2 :(得分:1)
int to double 是C ++中的推广,可以隐式完成。
double to int 也可以隐式完成,但应谨慎使用,因为许多双精度要么不代表圆整数值,要么太大而无法转换。大多数编译器都会警告精度损失,所以演员应该明确地去除警告 - if 你确定你做的是正确的事。
字符串为double,double为字符串:这些通常仅用于输入/输出(GUI,控制台,文本文件,...)。数值应该在程序内部处理,而不是作为字符串。如果可能,您应该在程序中防止双&gt; string-&gt;双转换链,因为这两种转换都不准确,容易出现舍入和其他错误。