c++将const对象引用传递给函数

c++ passing a const object reference to a function

本文关键字:函数 对象引用 const c++      更新时间:2023-10-16

错误:将"const QByteArray"作为"QByteArray&QByteArray::append(const QByteArray&)'丢弃限定符[-fpermission]

由于在作为函数参数传递时将对象设为常量是一种惯例,所以我已经这样做了。但现在我犯了一个错误!!,我不想让函数保持不变,因为我必须将qbyte数组中的数据转换为short,然后将其附加到另一个数组中。

QByteArray ba((const char*)m_output.data(), sizeof(ushort));
    playbackBuffer.append(ba);

我真的需要把这个数组传给playbackbuffer
它在playbackBuffer.append(ba)上给了我一个错误;

请帮助
提前感谢

这意味着您正在const成员上调用一个非const成员函数。假设append函数修改了字节数组。对于const引用,您不应该进行修改。

基本上,它所说的是您试图附加到一个常量数组。

如果"append"不更改对象本身,而只是返回附加的两个数组,则需要将该方法声明为const以允许调用。

考虑一下:

struct foo
{
    void bar();
};
const foo f;
f.bar();

这里,在对bar()的调用中,this指针是&f。但是bar()不是常量函数,所以this的类型是foo*,这与const foo*不兼容。(换句话说,bar()说它可能会突变foo,但f说它是一个不可变的foo。)

bar()需要标记为const(如果可以的话),或者f不需要是const

在您的情况下,我假设您使用的是Qt,因此不能修改QByteArray(也不应该修改,因为append必然是一个非常量函数),而是建议您去掉对象上的const,这会阻止您使用该函数。

那么您正试图在const对象上调用一个非常量函数?这就是将const xxx传递为"this"参数的含义。因为最终任何成员函数都是(类*this,其余参数)

要么制作

QByteArray& QByteArray::append(const QByteArray&);

QByteArray& QByteArray::append(const QByteArray&) const;

(极不可能解决任何问题)或只是

    QByteArray* pObj = const_cast<QByteArray*>(&your_obj)
    if (pObj)
        pObj->append(...