通常我只使用 reinterpret_cast
来做一些低级和“神奇”的事情,然后我创建一个测试用例以确保它在编译时在系统上工作。
operator list<const T>&() {
return *reinterpret_cast<list<const T>*>(this);
}
这样安全吗?这不是一个愚蠢的 Actor ,我看不出有任何危险的理由,但是我没有在一些非常具体的情况下使用它,我在很多地方使用列表....
所以是的,我看不出在这种特定情况下它不安全的原因。
该类使用虚函数(所以 enable_if
和其他元编程不会妨碍,因为你不能混合使用虚函数和模板(因此 SFINAE))所以我真的认为它应该没问题,有人可以确认吗?
最佳答案
除非您添加了偏特化来强制 list<T>
之间的继承关系和 list<const T>
,它们是两种完全不同的类型。标准 C++ 不允许您假装一种类型真的是另一种类型,并且由于 C++ 不允许这样做,编译器会根据您不这样做的假设冒昧地进行优化。当你打破这个假设时,你会得到各种奇妙的莫名其妙的结果。
但是因为这是你自己的类,你可以强制这样的继承关系:只需要list<T>
派生自 list<const T>
, 让list<const T>
完成所有工作,并拥有list<T>
提供一些额外的必需方法来修改包含的数据。
关于c++ - 这有多危险? (List<T> 被转换为 List<const T>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24894057/