我想编写一个跨平台的函数(win32 和 linux),并返回日期时间的字符串表示 [hh:mm:ss dd-mm-yyyy]。
知道我只想以流方式将返回的字符串用作临时字符串,如下所示:
std::cout << DateTime() << std::endl;
我考虑用以下原型编写一个函数
const char* DateTime();
如果您返回一个字符数组,则必须在完成后将其删除。但我只想要一个临时的,我不想担心取消分配字符串。
所以我写了一个只返回一个 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;
}
我意识到我正在返回 DateTime 中的堆栈变量的副本。这是低效的,因为我们在 DateTime 堆栈上创建字符串,填充它,然后返回一个副本并销毁堆栈上的副本。
c++11 移动语义革命是否已经解决了这种低效率问题——我可以对此进行改进吗?