所以这是我使用static_cast进行的第一次“测试”,我从来没有这样做过,所以请耐心等待我(我是c ++的新手,3天前说过)
// ConsoleApplication3.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream"
#include "string"
int main()
{
float value = 2.5f;
int temp;
std::cout << value;
std::cout << static_cast<std::string>(value) ;
std::cin.get();
}
它出错了
我错过了什么吗?错误C2440:'static_cast':无法从'float'转换为 '的std :: string'
IntelliSense:没有合适的构造函数可以从“float”转换 到“std :: basic_string, 的std ::分配器&gt;“中
答案 0 :(得分:3)
static_cast
用于在彼此之间安全地转换可转换类型,这意味着共享相同基类的类型或在彼此之间定义转换运算符的类型。虽然std::string
可能会定义一个接收float
(不确定)的构造函数,但它不能从float
转换。
答案 1 :(得分:2)
static_cast
不能以这种方式使用。 static_cast
用于强制转换 - 换句话说,假装(在某种程度上)传入的内容实际上是其他东西。您需要做的是转换。
您无需将float
转换为cout
- 只需:
std::cout << value;
如果您确实需要转换,那么有很多选择:
std::to_string
(C ++ 11)std::stringsgtream
boost::lexical_cast
只是少数。
答案 2 :(得分:1)
您尝试实现的不是强制转换,而是将浮点数转换为字符串。有几种方法可以做到这一点。
这很好地解释了static_cast:Regular cast vs. static_cast vs. dynamic_cast
这解释了如何将实数转换为字符串:How do I convert a double into a string in C++?
这是每个人都应该阅读的关于c ++中各种演员的答案:When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
答案 3 :(得分:1)
static_cast
用于将一种类型转换为其他可转换类型。未定义从float
到std::string
的转换。
但是,获取值的字符串表示形式的方法是调用函数std::to_string()
:
int main()
{
float val = 10.0f;
std::string str = std::to_string( val );
}
但是输出流也被分配以用于非字符串类型。所以只需将浮动放入流中:
std::cout << val;
10.0