4

この場合

void f(int *);
void f(const int *);
...
int i;
f(&i);

状況はかなり明確です - f(int *) が呼び出されますが、これは正しいようです。

しかし、私がこれを持っている場合(間違ってそのように行われました(*)):

class aa
{
public:
    operator bool() const;
    operator char *();
};

void func(bool);

aa a;
func(a);

operator char *() が呼び出されます。そのような決定パスが、演算子 bool() に行くよりも優れている理由がわかりません。何か案は?

(*) const を 2 番目の演算子に追加すると、コードは当然期待どおりに機能します。

4

3 に答える 3