Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 严格的别名如何解决? inline void addHeader(T值) { 如果(sizeof(T)>m_outputBufferStart) { std::clog_C++ - Fatal编程技术网

C++ 严格的别名如何解决? inline void addHeader(T值) { 如果(sizeof(T)>m_outputBufferStart) { std::clog

C++ 严格的别名如何解决? inline void addHeader(T值) { 如果(sizeof(T)>m_outputBufferStart) { std::clog,c++,C++,可以通过将数组值强制转换为整数以执行指针运算来消除警告 inline void addHeader(T value) { if(sizeof(T) > m_outputBufferStart) { std::clog << "[Error - OutputMessage::addHeader] m_outputBufferStart(" << m_outputBufferStart << ") < " <<

可以通过将数组值强制转换为整数以执行指针运算来消除警告

inline void addHeader(T value)
{
    if(sizeof(T) > m_outputBufferStart)
    {
        std::clog << "[Error - OutputMessage::addHeader] m_outputBufferStart(" << m_outputBufferStart << ") < " << sizeof(T) << std::endl;
        return;
    }

    m_outputBufferStart -= sizeof(T);
    *(T*)(m_buffer + m_outputBufferStart) = value; //here is error
    m_size += sizeof(T); //current size of buffer
}
更具C++y风格的方法可能是将类型强制转换为指针,然后将其复制到缓冲区

*(T*)((uintptr_t)m_buffer + m_outputBufferStart) = value;

您可以始终使用[placement syntax]和复制构造函数(并通过常量引用传递
value
,顺便说一句)。如果要这样做,最好是一个简单的类型,顺便说一句。分配/realloc内存需要太多时间,不管怎样,我的解决方案是有效的
m_outputBufferStart
的类型是什么?我猜它是
char*
?我猜这隐藏了警告,但严格的别名“bug”是否可能存在尚未解决?因此需要进一步更改?@AaronMcDaid回顾这一点,问题中的代码似乎没有严格的别名冲突。无法真正说明OP是如何生成警告的,或者我的答案会有什么帮助。
std::copy_n(&m_buffer[m_outputBufferStart], sizeof(T), (uint8_t*)value);