class Cell : public QTableWidgetItem
{
public:
Cell();
QTableWidgetItem *clone() const;
...
}
上面是Qt程序中的类定义。 以下是其余部分。
QTableWidgetItem *Cell::clone() const
{
return new Cell(*this);
}
我的问题是关于最后一句,如果我把它改成like:
return new Cell(this);
然后Qt会给出错误信息:
为什么?我知道 this
是一个指针,不能作为参数。
但是 *this
可以是 &
类型吗?
最佳答案
由于您尚未为您的类定义复制构造函数,编译器会为您生成一个具有以下签名的复制构造函数:Cell(const Cell&)
(在此处阅读更多信息:Conditions for automatic generation of default/copy/move ctor and copy/move assignment operator?)。当您尝试调用 Cell(this)
时,编译器会尝试在各种 Cell
构造函数中查找 Cell(Cell*)
- 显然没有匹配项. Cell(*this)
与自动生成的复制构造函数 Cell(const Cell&)
匹配,因为它需要对类型为 Cell
的对象的引用一个参数(不是指向它的指针),并且 *this
取消引用该指针,因此可以通过引用传递实际对象。就所考虑的调用语法而言,编译器可以将 Cell(*this)
的调用解析为按引用传递或按值传递。由于在您的情况下,复制构造函数通过引用接收参数(由于签名中的 &
),编译器会将 Cell(*this)
解析为传递-reference(实际上必须是引用,但那是另一回事)。在此处阅读有关该主题的更多信息:What's the difference between passing by reference vs. passing by value?
关于c++ - 为什么 *this 可以用作 & 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15446900/