在C ++中将数据从一种类型转换为另一种类型?

时间:2013-10-30 09:22:27

标签: c++

我想了解如何在专业级软件中进行类型转换? 请考虑以下转换:

  1. int to double
  2. double to int
  3. 要加倍的字符串
  4. double to string
  5. 目前我正在将Qt用于我的项目,该项目具有执行这些任务的API。 所以我只想知道人们如何使用标准C ++执行这些转换。 准确性,速度和记忆是各自秩序中的优先事项。

3 个答案:

答案 0 :(得分:2)

要使int加倍,您只需执行static_cast<double>(int_value); 从double到int它取决于具体情况,大多数情况下static_cast会这样做,但是,有时您需要对舍入为int的值进行特定控制。为此,您可以使用floorroundceil等功能。

对于字符串到任何东西和任何字符串,有几个选项:

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)

  1. int to double 是C ++中的推广,可以隐式完成。

  2. double to int 也可以隐式完成,但应谨慎使用,因为许多双精度要么不代表圆整数值,要么太大而无法转换。大多数编译器都会警告精度损失,所以演员应该明确地去除警告 - if 你确定你做的是正确的事。

  3. 字符串为double,double为字符串:这些通常仅用于输入/输出(GUI,控制台,文本文件,...)。数值应该在程序内部处理,而不是作为字符串。如果可能,您应该在程序中防止双&gt; string-&gt;双转换链,因为这两种转换都不准确,容易出现舍入和其他错误。

相关问题