将转换构造函数与运算符重载相结合

时间:2012-02-29 23:28:45

标签: c++

为什么不为i2隐式调用转换构造函数?

class NumString
{
    public:
        NumString(const char*  s)
        {
        }

        int operator*( int i)
        {
            return 42;
        }
};


int main(void)
{
    int i1 = (NumString) "string" * 2;  //OK
    int i2 =  "string" * 2;             //ERROR
}

2 个答案:

答案 0 :(得分:5)

因为编译器在没有涉及任何用户定义类型的情况下不调用用户定义的转换。

答案 1 :(得分:5)

表达式"string" * 2仅涉及const char *int,为什么编译器会以任何方式考虑NumString

如果它像您期望的那样工作,如果多个类具有合适的转换构造函数,编译器将如何选择正确的转换?