c++ - 传递 'const' 作为 ' this ' 参数

标签 c++ constants this

<分区>

Possible Duplicate:
c++ passing a const object reference to a function

void SpectrumAnalyserThread::calculateFFT(AnalogData &frame, const QByteArray       &playbackBuffer)   
{

   fft->window(frame.data(),frame.size());

    fft->fix_fftr(frame.data(), qFloor(log(frame.size()) / log(2)), 0);

     for(int i = 0; i < m_numSamples; ++i)
     {
        m_output.push_back(frame[i]);
     }
     fft->fix_fftr(m_output.data(), qFloor(log(m_output.size()) / log(2)), 0);

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

    const_cast<QByteArray &>(playbackBuffer);

    playbackBuffer.append(ba);

    m_output.clear();

    calculateMagnitude(frame);

}  

我收到以下错误:

error: passing 'const QByteArray' as 'this' argument of 'QByteArray& QByteArray::append(const QByteArray&)' discards qualifiers [-fpermissive]

如果我将函数设为 const,那么它会在以下位置抛出错误 m_output.clear()m_output.push_back(),这是显而易见的,但我需要清除缓冲区,以便在再次调用该函数时不会附加以前的数据.

最佳答案

如果你想修改playbackBuffer那么你应该把参数作为一个非const参数:

QByteArray &playbackBuffer

这完全独立于 SpectrumAnalyserThread 的成员函数是否被声明为 const(如果它修改了 this,则不应该这样)'内部状态)。


请注意,此行无效。要使用强制转换的结果,您必须对它做一些事情。单独进行强制转换的语句仅执行转换,然后丢弃该转换的结果。

const_cast<QByteArray &>(playbackBuffer);

你可以做类似下面的事情,但它冒着未定义行为的风险,并且滥用了你与函数调用者之间的契约,你说,通过引用 const 引用,你不是将要修改 playbackBuffer

const_cast<QByteArray &>(playbackBuffer).append(ba);

关于c++ - 传递 'const' 作为 ' this ' 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9328320/

相关文章:

c++ - 如何在 C++ 中访问动态分配的矩阵?

java - 在 Java 中使用 "this"

java - 将句柄传递给 java 中的子类时,我应该使用声明还是 this() ?

haskell - 理解 Data.Functor.Constant 构造函数和应用规律

c++ - 为什么 std::ranges::filter_view 对象必须是非常量才能查询其元素?

c - strchr 实现如何工作

javascript - 为什么 classList.add 不适用于 html onClick

c++ - 在没有当前窗口对象的情况下创建开罗上下文

c++ - 如何解决--------undefined reference to `__chkstk_ms' --------on mingw

c++ - vector 初始化