You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++双引用(&&)技术疑问:(char*)&info是否等价于T&&?

问题解答:(char*)&info 和 T&& 完全不等价

先直接给结论:这两者没有任何等价关系,是完全不同的C++语法特性,解决的问题也完全不沾边。下面分别拆解说明:

1. 先看你代码里的 (char*)&info

你的重载运算符代码中:

out.writeRawData((char*)&info, sizeof(info));

这里的操作可以拆成两步理解:

  • &info:取PbxCfgHeader类型变量info的内存地址,得到的是PbxCfgHeader*类型的指针;
  • (char*):这是C风格的强制类型转换,把PbxCfgHeader*转换成char*。这么做的原因是QDataStream::writeRawData需要接收const char*类型的参数,它的作用是按字节读取传入地址开始的内存内容,把结构体info的原始二进制数据写入数据流。本质上这是指针类型的强制转换,目的是实现"内存二进制拷贝"的操作。

2. 再说说 T&& 是什么

T&&是C++11引入的右值引用,它的核心作用和使用场景完全不同:

  • 用来绑定到右值(比如临时对象、字面量、std::move后的左值);
  • 支持移动语义,避免不必要的对象拷贝,提升代码性能;
  • 配合模板实现完美转发,让函数参数保持原有的值类别(左值/右值)。

举个简单的右值引用示例:

// 类的移动构造函数,用右值引用接收临时对象
class MyClass {
private:
    int* data;
public:
    MyClass(MyClass&& other) noexcept {
        // 直接转移other的资源,而非拷贝
        this->data = other.data;
        other.data = nullptr;
    }
};

这里的MyClass&&就是右值引用,和指针类型转换没有任何关联。

总结

  • (char*)&info是指针类型转换,用来把结构体的地址转成字节指针,做原始内存读写;
  • T&&是右值引用,用来处理右值,实现移动语义和完美转发;
    两者的语法意义、使用场景、作用完全不同,绝对不能等价起来。

内容的提问来源于stack exchange,提问作者Koder 228

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:58:20