是否明确定义了使用 const 成员强制转换为相同的布局?

问题描述 投票:0回答:1

考虑以下类型:

template<typename T> struct View
{
    T*     data;
    size_t size;
};

View<T>&
View<const T>&
投射是否有效?

它会调用未定义的行为吗?

我怀疑转换将在所有编译器上按预期工作,但由于严格的别名规则,根据标准,技术上将是未定义的行为。

c++
1个回答
0
投票

是的,将 View& 转换为 View& 通常是有效的。在底层,const T 确保 data 指向的数据不能通过 View& 引用进行修改,从而提供只读访问。然而,从技术上讲,这种类型转换可以被视为违反了 C++ 中严格的别名规则,这在某些情况下可能会导致未定义的行为,尽管许多编译器可以毫无问题地处理它。

© www.soinside.com 2019 - 2024. All rights reserved.