c++ 右值取地址引起的错误

在测试time函数时出现的错误。

localtime需要一个time_t的指针。

time函数返回的是一个time_t的对象,这个对象是一个右值,对右值取引用是不可以的。

右值的意思是临时的,要赋给左值的,他是没有具体的应该的存储位置的。

2.cpp:13:44: error: lvalue required as unary '&' operand
   _tm = localtime((time_t*)(&(time(nullptr))));

另一个测试样例: 1.cpp

#include <iostream>

using namespace std;

class A
{
public:
    int _num;
    A(int num): _num(num){};
};

void f(A* a)
{
  cout<<a->_num<<endl;
}

A getA(int num)
{
  return A(num);
}

int main (int argc, char *argv[]) {
  f(&getA(10));
  return 0;
}

编译报错:

D:\code\c\test_right_value>make
g++ 1.cpp -o 1.exe
1.cpp: In function 'int main(int, char**)':
1.cpp:23:13: error: taking address of temporary [-fpermissive]
   f(&getA(10));
             ^
make: *** [Makefile:2: 1.exe] Error 1
文章目录