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