gpt4 book ai didi

C++ : why convert to void* before doing a test

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:52 24 4
gpt4 key购买 nike

有谁知道为什么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;
}
// ....
}

最佳答案

正如@KerrekSB 在评论中提到的,这是糟糕的编码风格。

作者试图做的是避免编译时警告比较不同类型的指针,例如 Stack<int>* 类型的指针。和一个 Stack<double>* 类型的指针.

使用重载可以很容易地避免这种情况。

// Assign an object of the same type.
template<typename T>
Stack<T>& operator=(const Stack<T> & op2){
if (this == &op2){
return *this;
}
// ....
}

// Assign an object of a different type.
template<typename T>
template<typename T2>
Stack<T>& operator=(const Stack<T2> & op2){

// For objects of different types, this check is not necessary
// at all. It will always be false.
// if ((void*)this==(void*)&op2){
// return *this;
/// }

// ....
}

关于C++ : why convert to void* before doing a test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35343578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com