是否将std :: uint16_t结构的指针作为std :: uint16_t的指针传递未定义的行为?

我正在使用执行类似操作的代码:

#include <cstdint>
#include <iostream>

static constexpr int TOOL_COUNT = 3;

struct Parameters {
    std::uint16_t version;
    std::uint16_t delay;
    std::uint16_t minimumTemperatures[TOOL_COUNT];
    std::uint16_t maximumTemperatures[TOOL_COUNT];
};

void useAsPointerToUint16(const std::uint16_t* data,const std::size_t size) {
    std::cout << size << std::endl;
    for (unsigned int i = 0; i < size; ++i) {
        std::cout << *data;
        ++data;
    }
    std::cout << std::endl;
}

int main() {
    Parameters parameters{1,2,{3,4,5},{6,7,8}};
    useAsPointerToUint16(reinterpret_cast<std::uint16_t*>(&parameters),sizeof(parameters) / sizeof(std::uint16_t));
}

对我而言, useAsPointerToUint16 中的取消引用是未定义的行为。

我对吗?

didy21dd 回答:是否将std :: uint16_t结构的指针作为std :: uint16_t的指针传递未定义的行为?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3142727.html

大家都在问