gpt4 book ai didi

c++ - 从函数返回字符串

转载 作者:太空狗 更新时间:2023-10-29 19:59:46 25 4
gpt4 key购买 nike

我想编写一个跨平台(win32 和 linux)的函数,并返回日期时间 [hh:mm:ss dd-mm-yyyy] 的字符串表示形式。

知道我只想使用返回的字符串作为流方式的临时字符串,如下所示:

std::cout << DateTime() << std::endl;

我考虑过用下面的原型(prototype)写一个函数

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 move 语义革命是否解决了这种低效率问题——我可以对此进行改进吗?

最佳答案

lapin,你的代码是很好的 C++11 代码。在 C++98/03 中,由于编译器优化,您的代码可能是高效的,但不能保证这些优化。在 C++11 中,这些相同的优化可能仍会使您的返回免费,但以防万一,您的字符串将被 move 而不是复制。

因此,无罪地按值(value)返回! :-)

小尼特:

最佳做法是在首次使用时声明您的值,而不是在 block 的顶部:

string sValue = ss.str();
return sValue;

或者甚至:

return ss.str();

但这只是一个小问题。您的代码很好并且高效。

关于c++ - 从函数返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com