c ++使用函数result作为参数

时间:2017-08-16 07:38:15

标签: c++ visual-studio function parameter-passing pass-by-reference

这些代码完美无缺:

#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表达式必须是左值或函数指示符

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

P.S。我在Visual Studio 2017中工作。

2 个答案:

答案 0 :(得分:0)

术语&variable为您提供左值的地址。左值是可以赋值给它的任何值,因此具有有效的内存地址。如果考虑函数的返回值,则无法分配给它:

time(0) = 3;

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

如果你想定义一个接受右值引用的函数,你必须给它以下签名:

void function(int&& param)

&&表示右值参考。

答案 1 :(得分:-1)

请查看此SO answer关于左值和左值的信息,因为它提供了更详细的解释。

但它基本上包含了这个:
&运算符获取对象的地址。函数调用的结果是一个临时对象(一个rvalue),它最终会在调用后被销毁(我确实不确定的时候)。
取rvalue的地址会导致悬空指针,因此被禁止。