0

我想了解专业级软件中的类型转换是如何发生的?考虑以下转换:

  1. int 加倍
  2. 加倍为 int
  3. 字符串加倍
  4. 双字符串

目前我正在为我的项目使用 Qt,该项目具有执行这些任务的 API。所以我只是想知道人们如何仅使用标准 C++ 执行这些转换。准确性、速度和内存是它们各自的优先级。

4

3 回答 3

2

对于 int 到 double 你可以简单地static_cast<double>(int_value); 从 double 到 int 这取决于情况,大多数时候 static_cast 会这样做,但是,有时你需要对四舍五入到 int 的值进行特定控制。为此,您可以使用floorround或等函数ceil

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

snprintf()- 除非您知道自己在做什么,否则不推荐。精度难以控制

stringstream/ istringstream- 这具有良好的准确性和易于控制

boost::format- 个人最喜欢的,查看文档: http: //www.boost.org/doc/libs/1_53_0/libs/format/doc/format.html

就性能而言,这取决于我会选择 snprintf 在某些情况下是最快的,因为它不需要分配。

于 2013-10-30T09:35:53.447 回答
1

第一个通常是隐含的(因为它是促销)。第一个和第二个可以用一个简单的来完成static_cast

double x = 0.123;
int y = 123;
std::cout << static_cast<int>(x) << '\n';
std::cout << static_cast<double>(y) << '\n';

第三个需要std::istringstream

std::string x = "123.456";
double y;
std::istringstream ss(x);
ss >> y;

第四个需要std::stringstream

double x = 123.456;
std::stringstream ss;
ss << x;
ss.str(); // your string
于 2013-10-30T09:26:29.627 回答
1
  1. int to double是 C++ 中的一种提升,可以隐式完成。

  2. double 到 int也可以隐式完成,但应谨慎使用,因为许多双精度值要么不代表整数值,要么太大而无法转换。大多数编译器都会警告精度损失,因此应该明确强制转换以消除警告 -如果您确定自己做的是正确的事情。

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

于 2013-10-30T09:37:09.217 回答