解除引用类型惩罚指针将破坏严格别名规则

时间:2016-01-06 21:16:35

标签: c++

我的问题与我之前提出的问题密切相关:

C++ cast raw table to another table type

我在SO上看到过这个警告的不同帖子,但不幸的是他们没有解决我的问题。

简而言之,我想在堆栈上声明一些空间,然后将其用作某种类型T的数组,其中T可以是任何类型(特别是非POD类型),我不能使用C ++ 11。

我尝试使用的两个表的声明是:

char m_rawMemory[sizeof(T) * _size];
T(& m_tabT)[_size];

解决我的问题的建议解决方案是:

union Data {
    Data() {}
    T values[Size];
} data;

如果不是这样的话会很好,我不能使用C ++ 11,因为我的编译器不支持不受限制的联合(嵌入式环境的程序),因此与POD不同的类型将无法编译。

所以我决定创建一个char表并以下面的方式使用它:

m_tabT(reinterpret_cast<T(&)[_size]>(m_rawMemory)

编译,但在标题中给出警告。所以我的问题是:

为什么我会收到此警告? 如何正确地做到这一点?

0 个答案:

没有答案
相关问题