gpt4 book ai didi

c++ - 错误 : lvalue required as unary & operand

转载 作者:IT王子 更新时间:2023-10-29 00:08:54 33 4
gpt4 key购买 nike

编译时(使用 Linux Server 6.1 版)

strftime(AppTime, sizeof(AppTime),"%Y/%m/%d %T", localtime(&((long)u32_Time)));

出现错误“错误:左值需要作为一元‘&’操作数”

但相同的代码在 Red Hat Enterprise Linux AS release 3 中编译成功。

为什么会这样?如何纠正?

最佳答案

地址运算符 &需要一个变量来获取地址。你投的结果(long)u32_Time是一个临时的,不一定驻留在内存中,因此没有可以使用的地址。因此,如果那段代码曾经在某个地方编译过,那么它就是一个非标准的编译器扩展。

标准 §5.3.1,3 要求:

The result of the unary & operator is a pointer to its operand. The operand shall be an lvalue [...]

如何解决这个问题: std::localtime需要一个指向 std::time_t 的指针所以你最好提供。您没有提供任何解释或进一步的代码,所以我只能猜测 u32_Time是一些 4 字节无符号算术类型,应该以某种方式表示时间。如何将其正确转换为 std::time_t取决于您的编译器如何实现后者以及您如何获得进一步的值(value)。简单地应用 C-cast 是不可可移植的,并且转换为 long更不便携。
当且仅当 std::time_t 在您当前的平台上也是一个无符号的 32 位类型,使用与您的 u32_Time 相同的表示形式。 , 使用

可能就足够了
 localtime(reinterpret_cast<std::time_t*>(&u32_Time));

更便携的是首先将值存储在正确的数据类型中:

 std::time_t time = u32_Time;
localtime(&time);

如果time_t,您将得到必要的警告和/或错误。和 u32_Time 的类型不兼容。

我强烈建议不要使用 C-cast,因为一旦你必须将这段代码移植到另一个平台,你将无法轻易找到那个讨厌的转换。

关于c++ - 错误 : lvalue required as unary & operand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22788026/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com