I wanted to write a function that'll be cross platform (win32 & linux), and return a string representation of the datetime [hh:mm:ss dd-mm-yyyy].
Knowing that I just want to use the returned string as a temporary in a stream fashion as below:
std::cout << DateTime() << std::endl;
I considered writing a function with the following prototype
const char* DateTime();
If you return a character array, you must delete it once you're done. But I just want a temporary, I don't want to have to worry about de-allocating the string.
So I've written a function that just returns an std::string:
#include <ctime>
#include <string>
#include <sstream>
std::string DateTime()
{
using namespace std;
stringstream ss;
string sValue;
time_t t = time(0);
struct tm * now = localtime(&t);
ss << now->tm_hour << ":";
ss << now->tm_min << ":";
ss << now->tm_sec << " ";
ss << now->tm_mday + 1 << " ";
ss << now->tm_mon + 1 << " ";
ss << now->tm_year + 1900;
sValue = ss.str();
return sValue;
}
I realize that I'm returning a copy of the stack variable in DateTime. This is inefficient in that we create the string on the DateTime stack, populate it, then return a copy and destroy the copy on the stack.
Has the c++11 move-semantics revolution done anything to resolve this inefficiency - can I improve upon this?