考虑以下类型:
template<typename T> struct View
{
T* data;
size_t size;
};
从
View<T>&
到 View<const T>&
投射是否有效?
它会调用未定义的行为吗?
我怀疑转换将在所有编译器上按预期工作,但由于严格的别名规则,根据标准,技术上将是未定义的行为。
是的,将 View& 转换为 View& 通常是有效的。在底层,const T 确保 data 指向的数据不能通过 View& 引用进行修改,从而提供只读访问。然而,从技术上讲,这种类型转换可以被视为违反了 C++ 中严格的别名规则,这在某些情况下可能会导致未定义的行为,尽管许多编译器可以毫无问题地处理它。