使用运算符访问右值地址?

Access the rvalue address using an operator?

如何使用表达式或运算符获取右值的地址?

char buffer[100];
time_t rawtime=time(nullptr); //rawtime used only once ,after that it's abandoned.
strftime(buffer, 80, "%y%m%d %H%M%S", localtime(&rawtime));// rewrite these two lines into one line?

应该这样操作:

strftime(buffer, 80, "%y%m%d %H%M%S", localtime(&(time(nullptr))));

内置的寻址运算符需要一个左值操作数,因此您需要以某种方式产生一个左值。

您可以使用 std::move 的某种相反形式将右值转换为左值,此处称为 stay:

template <typename T>
T & stay(T && x) { return x; }

用法:

std::localtime(&stay(std::time(nullptr))

或者,您可以使用其他一些具有引用参数并提供显式 const 模板参数的预先存在的函数模板,因为右值可以绑定到 constant左值引用。 (通常这是此类接口的一个非常危险的方面("rvalue magnets"),但我们将在此用例中利用它们。)一个示例函数模板可以是 std::min,但我们可以使用 std::addressof 在这里更方便:

#include <memory>

// ...
std::localtime(std::addressof<const std::time_t>(std::time(nullptr))
// ...         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^