Используя static_cast<datatype> для преобразования float в строку C++
Так что это мой первый "тест" с использованием 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::allocator>"
я что-то пропустил?
4 ответа
static_cast
используется для безопасного преобразования конвертируемых типов между собой, то есть типов, которые совместно используют один и тот же базовый класс, или типов, которые определяют операторы преобразования между собой. Хотя std::string
может определить конструктор, который принимает float
(не уверен) это не может быть отлито из float
,
static_cast
не может быть использован таким образом. static_cast
используется для приведения - другими словами, притворяется (в некотором смысле), что переданная вещь на самом деле является чем-то другим. Что вам нужно сделать, это конвертировать.
Вам не нужно конвертировать float
в cout
это просто:
std::cout << value;
Если вам нужно конвертировать, то есть много вариантов:
std::to_string
(C++ 11)std::stringsgtream
boost::lexical_cast
Есть только несколько.
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
То, что вы пытаетесь достичь, это не приведение, а преобразование числа с плавающей точкой в строку. Есть несколько способов сделать это.
Это очень хорошо объясняет static_cast: обычное приведение против static_cast против dynamic_cast
Это объясняет, как преобразовать действительное число в строку: как мне преобразовать двойное число в строку в C++?
И это ответ, который каждый должен прочитать о различных приведениях в C++: Когда следует использовать static_cast, dynamic_cast, const_cast и reinterpret_cast?