は、以下のコードを検討:ポインタに関連する演算子を適用
struct X
{
int x;
};
X xInstance;
class A
{
public:
operator X*()
{
return &xInstance;
}
};
int main()
{
A a;
*a = X(); // ok
a[0] = X(); // ok
// a->x = 0; // error
}
A
ポインタ型への暗黙的な変換を有します。私はポインターが必要な3つの状況でそれを使用しようとします。最初の2行は問題ありませんが、に暗黙的に変換されたstruct X
〜operator->
のフィールドを参照しようとすると機能しません。何故ですか?概念的には、operator[]
はoperator->
とどのように異なるのですか? g++
6.3.0およびVC++ 2017
C++ 14 [over.match.oper] /3.3では、特に 'operator->'の場合には 演算子& ')ビルトインの候補セットは空です –
@MM良いキャッチです。私はそれがどこかにあったと思った。 – aschepler