gpt4 book ai didi

c++ - 如何获取临时/右值的地址进行复制?

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:08 35 4
gpt4 key购买 nike

我打开了一个要写入的 ofstream 文件,我想写入 4 个字节的 unsigned int。我希望 int 为零,所以我尝试这样做:

outFile.write((char*)&unsigned int(0), sizeof(unsigned int));  // Expression must be an lvalue

unsigned int a = 0;
outFile.write((char*)&a, sizeof(unsigned int)); // This works fine

我的理解是,像 unsigned int 这样的东西的生命周期到该行的末尾为止,换句话说,被下一个分号破坏。通过事先创建本地来编写这样的东西的唯一方法是什么?另外,我注意到 fstreams 采用 char 指针,我想知道在复制东西时是否需要谨慎,例如在二进制模式下我希望它写入的字节与内存中的字节完全相同,但是例如如果我有一个 unsigned int 255 它会按原样逐位复制这个 unsigned int 吗?在处理原始内存复制时,这不应该类似于空指针吗?

最佳答案

局部变量在超出作用域时被销毁。这通常在下一个右大括号处。

outFile.write((char*)&unsigned int(0)

正在尝试获取不存在的地址。你必须先实例化变量

{
....code...
{
unsigned int a = 0;
outFile.write((char*)&a, sizeof(unsigned int));
}
<- legally a no longer exists
unsigned int b = 0; // b *might* now occupy the same stack space that was used to store a. then again it might not, it depends on the compiler.
}
<- b no longer exists.

您可以使用非正统的方式来访问超出范围的局部变量,这取决于编译器如何构建堆栈帧,先前由所述局部变量占用的空间可能会或可能不会被现在处于事件状态的变量使用。

outFile.write((char*)&a, sizeof(unsigned int));

将尝试写入与 unsigned int 使用的一样多的位,一位一位。

但我会用

outFile.write((char*)&a, sizeof(a));

因为硬编码大小可能会让你以后头疼。如果您将 a 的数据类型更改为 double,但您忘记将 sizeof 更新为 sizeof(double)

关于c++ - 如何获取临时/右值的地址进行复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41906213/

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