使用函数结果作为参数的 C++

c++ using function result as an argument

本文关键字:参数 C++ 函数 结果      更新时间:2023-10-16

这些代码完美运行:

#include <ctime>

int main()
{
time_t t;
struct tm* now;
t = time(0);          // Here is my attention
now = localtime(&t);  // and here
return 0;
}

现在我想在 if 语句中将其用作条件,所以我想在一行中执行此操作。我尝试以下代码:

now = localtime(&(time(0)));

但是我得到了错误:

E0158 表达式必须是左值或函数指示符

为什么我不能在另一个函数内部调用一个函数并将其结果用作参数?

附言我在Visual Studio 2017工作。

术语&variable为您提供左值的地址。lvalue 是可以为其赋值并因此具有有效内存地址的任何内容。如果你考虑一个函数的返回值,你不能给它赋值:

time(0) = 3;

毫无意义。这就是为什么你无法得到它的地址。time(0)3都是右值引用。如果未捕获所有右值引用,则会在表达式末尾销毁,这可能是下一个分号或右括号。

如果要定义一个接受右值引用的函数,则必须为其提供以下签名:

void function(int&& param)

其中&&表示右值引用。

请查看这个关于左值和右值的 SO 答案,因为它提供了更详细的解释。

但它基本上围绕着这一点:
&运算符获取对象的地址。函数调用的结果是一个临时对象(右值(,最终在调用后被销毁(我不确定确切的时间(。
获取右值的地址会导致指针悬空,因此是被禁止的。