条款5:对定制的[型别转换函数]保持警觉
class Sample
{
public:
Sample(int i){m_i = i;}
operator int(){return 10;}
protected:
private:
int m_i;
};
int main(int argc, char* argv[])
{
Sample test(5);
if (10 == test)
{
printf("Wonderful!/n");
}
printf("Hello World!/n");
return 0;
}
我写的一段Example,很令人惊异的是10居然等于Sample的对象,不可思议。事实上是static_cast<int>(test),that means test.int(),然后返回10。这真是恐怖。所以遇到这样的问题,不要写operator int(),而应该写int asInt()。先前有经验的程序员在构造STL的时候就是这么做的。那么在构造函数之前还希望能够加上explicit,这也能避免一些错误,这些错误在这里就不再赘述了。