请帮助我了解 C++ 中的转换运算符到底是如何工作的。
我在这里有一个简单的例子,我试图理解它,尽管编译器实际上是如何进行转换的并不是很清楚。
class Example{
public:
Example();
Example(int val);
operator unsigned int();
~Example(){}
private:
int itsVal;
};
Example::Example():itsVal(0){}
Example::Example(int val):itsVal(val){}
Example::operator unsigned int (){
return (itsVal);
}
int main(){
int theInt = 5;
Example exObject = theInt; // here
Example ctr(5);
int theInt1 = ctr; // here
return 0;
}
您可以使用调试器遍历该代码(和/或在每个构造函数和运算符上放置断点),以查看哪些行调用了哪些构造函数和运算符。
因为您没有显式定义它们,所以编译器还为您的类创建了一个隐藏/默认的复制构造函数和赋值运算符。如果您想使用调试器查看它们在何处/何时被调用,您可以显式定义它们(如下所示)。
Example::Example(const Example& rhs)
: itsVal(rhs.itsVal)
{}
Example& operator=(const Example& rhs)
{
if (this != &rhs)
{
this->itsVal = rhs.itsVal;
}
return *this;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)