我想了解专业级软件中的类型转换是如何发生的?考虑以下转换:
- int 加倍
- 加倍为 int
- 字符串加倍
- 双字符串
目前我正在为我的项目使用 Qt,该项目具有执行这些任务的 API。所以我只是想知道人们如何仅使用标准 C++ 执行这些转换。准确性、速度和内存是它们各自的优先级。
我想了解专业级软件中的类型转换是如何发生的?考虑以下转换:
目前我正在为我的项目使用 Qt,该项目具有执行这些任务的 API。所以我只是想知道人们如何仅使用标准 C++ 执行这些转换。准确性、速度和内存是它们各自的优先级。
对于 int 到 double 你可以简单地static_cast<double>(int_value);
从 double 到 int 这取决于情况,大多数时候 static_cast 会这样做,但是,有时你需要对四舍五入到 int 的值进行特定控制。为此,您可以使用floor
、round
或等函数ceil
。
对于字符串到任何东西和任何东西到字符串,有几个选项:
snprintf()
- 除非您知道自己在做什么,否则不推荐。精度难以控制
stringstream
/ istringstream
- 这具有良好的准确性和易于控制
boost::format
- 个人最喜欢的,查看文档: http: //www.boost.org/doc/libs/1_53_0/libs/format/doc/format.html
就性能而言,这取决于我会选择 snprintf 在某些情况下是最快的,因为它不需要分配。
第一个通常是隐含的(因为它是促销)。第一个和第二个可以用一个简单的来完成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
int to double是 C++ 中的一种提升,可以隐式完成。
double 到 int也可以隐式完成,但应谨慎使用,因为许多双精度值要么不代表整数值,要么太大而无法转换。大多数编译器都会警告精度损失,因此应该明确强制转换以消除警告 -如果您确定自己做的是正确的事情。
string to double, double to string:这些通常仅用于输入/输出(GUI、控制台、文本文件,...)。数值应该在程序内部处理,而不是字符串。您应该尽可能在程序中防止 double->string->double 转换链,因为这两种转换都不准确并且容易出现舍入和其他错误。