크로스 플랫폼 (win32 & 리눅스)이 될 함수를 작성하고 datetime [hh : mm : ss dd-mm-yyyy]의 문자열 표현을 반환하고 싶습니다. 난 그냥 아래 스트림 방식으로 임시로 반환 된 문자열을 사용하려는 것을 알고함수에서 문자열 반환
: 나는 다음과 같은 프로토 타입으로 함수를 작성 간주
std::cout << DateTime() << std::endl;
const char* DateTime();
당신이 돌아 오면 문자 배열은 완료되면 삭제해야합니다. 그러나 나는 일시적인 것을 원한다. 나는 문자열의 할당 해제에 대해 걱정할 필요가 없다. 내가 날짜 시간에서 스택 변수의 복사본을 반환하고있어 실현
#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 스택에 문자열을 만들고, 채우고, 복사본을 반환하고 스택에서 복사본을 파괴한다는 점에서 비효율적입니다.이 비효율적 인 문제를 해결하기 위해 C++ 11 이동 의미론 혁명이 수행되었습니다.이를 개선 할 수 있습니까?
1) NRVO이 완전한 않은 문제가 있습니다. 2) 어떤 이유로 든 NRVO _didn't_가 시작되면 예가 반환 값은 복사되지 않고 이동됩니다. – ildjarn
체크 아웃 : http://stackoverflow.com/a/3109981/484072 – peacemaker
NRVO 란 무엇입니까 ??? – fishfood