Исках да напиша функция, която ще бъде междуплатформена (win32 и linux) и ще върне низово представяне на датата и часа [чч:мм:сс дд-мм-гггг].
Знаейки, че просто искам да използвам върнатия низ като временен по потоков начин, както е показано по-долу:
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 направи ли нещо, за да разреши тази неефективност - мога ли да подобря това?
Наистина не виждам нужда от всички тези неща.
Защо просто не установите връзка със сървъра по време на проверката, сървърът да генерира файл с всички параметри, които искате в него (дори в обикновен текст) и след това сървърът да подпише този файл и да го върне на софтуера?
Клиентът може да прочете файла и след това просто да потвърди подписа, като използва един от многото налични алгоритми за цифров подпис.
- person Jerry Coffin   schedule 30.06.2012tm_mday + 1
- трябва да премахнете това-1
,tm_mday
е базирано на 1. - person Alexey Frunze   schedule 30.06.2012