c++ - 这有多危险? (List<T> 被转换为 List<const T>)

标签 c++ c++11

通常我只使用 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/

相关文章:

c++ - Opencv:EM算法训练缓慢

java - 省略 for 循环中的第一个参数

c++ - C++11 是否允许 vector<const T>?

c++ - 在多文件程序中使用 "curiously recurring template pattern"

c++ - 将 .txt 文件列存储到 C++ 中的数组中

c++ - "error: expected unqualified-id before ' float ' "用于 operator[] 重载

c++ - 在封闭类的公共(public)接口(interface)中使用私有(private)嵌套类

c++ - C++11 中的新语法 "= default"

C++ 11:std::thread池化?

c++ - 需要帮助理解从 B.Stroustrup 的新书中摘录的这段文字