Используя 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;

Если вам нужно конвертировать, то есть много вариантов:

  1. std::to_string (C++ 11)
  2. std::stringsgtream
  3. 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?

Другие вопросы по тегам