Я чувствую, что мне нужно std :: cout различных двойных переменных.
Я сделал простую функцию для преобразования double в std :: string, которую затем могу использовать с std :: cout и т. Д.
// Convert a double to a string.
std::string dtos(double x) {
std::stringstream s;
s << x;
return s.str();
}
Кажется, что функция работает нормально, но мой вопрос: имеет ли этот подход (плохие) последствия для памяти, т.е. Я выделяю ненужную память или оставляю что-то «висящее»?
Спасибо, парни
Пит
Нет, ваш код в порядке, прочитайте комментарии к коду:
std::string dtos(double x) {
std::stringstream s; // Allocates memory on stack
s << x;
return s.str(); // returns a s.str() as a string by value
// Frees allocated memory of s
}
Кроме того, вы можете передать double
в cout
непосредственно.
Удивило, что никто не упомянул об этом, но вы можете обобщить этот алгоритм для любого типа, используя шаблоны.
Вот так:
template<typename T>
std::string to_string(const T& obj)
{
std::ostringstream s;
s << obj;
return s.str();
}
Таким образом, вы можете легко преобразовать в строку, например, так:
int x = 5;
to_string(x); // will convert the integer to a string
to_string(32); // constants works
to_string<double>(302); // you can explicitly type the type you wish to convert
Пример использования на этом ссылка на сайт.
Кроме того, как утверждают другие люди, память никуда не денется. Кроме того, я хотел бы отметить, что, поскольку вы пишете только в поток строк, возможно, вам следует использовать станд :: ostringstream для (1) дальнейшего разъяснения, когда люди читают ваш код и (2) без ошибок при использовании >> вместо <<
Вам не нужно менять двойники на строки, чтобы использовать std::cout
,
cout << x;
будет работать просто отлично, как
cout << dtos(x);
И если вы хотите изменить double на строку по другим причинам, вы можете использовать, вы можете использовать станд :: to_string в C ++ 11.
Кроме этого ваш код просто отлично.