2014-09-24 20 views
1

我一直在阅读有关转换操作符,但我仍然不确定何时调用转换操作符。考虑下面的例子:如何知道何时调用转换操作符

class foo 
{ 
public: 
    operator char*() 
    { 
     return "SomeText"; 
    } 
}; 


foo d; 
const char* m = static_cast<char*>(d); 

为什么用这个转换调用转换运算符?哪个运营商正在呼叫它?

+2

为什么你的转换操作符不会被调用?你明确要求从你的对象'd'转换到'char *'。 – 2014-09-24 07:39:59

+0

我的印象是,只有在对象实例之前放置操作符时才会调用转换操作符 – Rajeshwar 2014-09-24 07:41:45

+0

转换函数不是“操作符”,尽管其名称中带有关键字“操作符”。 – 2014-09-24 07:48:24

回答

1

static_cast文档

援引如果new_type类型的临时对象可以声明与expression初始化 ,如由new_type Temp(expression);,这可能涉及 隐式转换,向new_type或所述构造函数的调用请拨 给用户定义的转换运算符,然后 static_cast<new_type>(expression)计算并返回该 临时对象的值。

而且这不是T.C.的运营商。注意到,这是一个conversion function

相关问题