隐式转换和运算符重载

时间:2016-10-12 12:04:11

标签: c++ c++11

我有以下代码:

struct helper {
    template<typename T> helper(T const&);
};

helper operator*(helper const&);

struct A {};

int main() {
    // (1)
    A a;
    sizeof(*a);

    // (2)
    int i;
    sizeof(*i);
}

案例(1)编译得很好,我知道它正在使用隐式转换为helper类型和给定的运算符重载。

但是,对于情况(2),我收到编译器错误:

invalid type argument of unary '*' (have 'int')

为什么隐式转换用于A类型而不是int

1 个答案:

答案 0 :(得分:8)

如果不涉及用户定义的类型,则假定任何运算符都是内置运算符。所以

helper operator*(helper const&);
*i属于内置类型(例如i)时,无法找到int