【发布时间】:2016-02-11 15:36:09
【问题描述】:
有谁知道为什么this 和&op2 这两个指针在比较之前先转换为void*? (本示例取自 C++ 模板:David Vandevoorde 和 Nicolai M. Josuttis 的完整指南)
template<typename T>
template<typename T2>
Stack<T>& operator=(const Stack<T2> & op2){
if ((void*)this==(void*)&op2){
return *this;
}
// ....
}
【问题讨论】:
-
因为两个不同类型的指针没有可比性? (但这意味着测试很愚蠢。应该有两个重载,一个用于具有测试的同质类型,一个用于不带测试的混合类型。)
-
有人能帮我读一下吗?这是一个允许将 Stack
分配给 Stack 的运算符,所以我可以将 Stack 分配给 Stack ?检查是看 Stack 是否已经是同一个 Stack ? -
@MobyDisk,只有当
Dog可以分配给Cat时才有可能。它适用于可以隐式转换的类型。例如,您可以将Stack<int>分配给Stack<double>。 -
@RSahu 你确定吗? stackoverflow.com/questions/4807643/container-covariance-in-c我们对这个Stack类了解不多,但是STL容器不支持你描述的。