【发布时间】:2015-12-30 06:11:45
【问题描述】:
这一行在我使用 C++ 时编译,但不是 C:
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL))); //make an lvalue with alloca
我对这种差异感到惊讶。甚至没有针对 C++ 的警告。
当我指定gcc -x c 时,消息是:
playground.cpp:25:8: error: lvalue required as unary '&' operand
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL)));
^
这里的& 不只是一个地址运算符吗?为什么它在 C 和 C++ 中不同?
虽然我可以在 C 中使用复合文字,但是否可以修改我的语法以使其在 C 和 C++ 中都可以使用?
【问题讨论】:
-
另外,区别不在于
&,而在于(*(time_t *)alloca(sizeof(time_t)) = time(NULL))是否为左值。 -
另外,为什么不把它写成两行呢?
time_t t = time(NULL); gmtime(&t); -
@immibis 主要是因为我想获取一个临时对象的地址(
time_t值只使用一次)。我发现 C 中的复合文字非常方便,但我不能在 C++ 中使用它。
标签: c++ c compiler-errors lvalue rvalue