我有以下代码:
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
?
答案 0 :(得分:8)
如果不涉及用户定义的类型,则假定任何运算符都是内置运算符。所以
helper operator*(helper const&);
当*i
属于内置类型(例如i
)时,无法找到int
的。