ポインターへのポインターを定義するコンストラクター呼び出し表記(declare-)を使用している場合(代入表記の代わりに-もちろん実行時に同じことを行います。これは単なる慣例です)、コンパイラエラーが発生します。なんでだろうと思っていました。
struct Foo
{ /* ... */ };
int main(int argc, char** argv)
{
Foo* parFoo = new Foo[2];
Foo** ppFoo(&parFoo); // invalid: C2059
Foo** ppFoo = &parFoo; // OK
delete[] parFoo;
}
エラーはC2059です-無効なトークンですが、多くのことを言っていません。ただし、これ&
は問題ではありません(つまり、演算子の優先順位エラーではない可能性があります)。私が次のことをした場合:
int main(int argc, char** argv)
{
Foo* parFoo = new Foo[2];
Foo** ppFoo = &parFoo; // OK
Foo** ppFoo2(ppFoo); // invalid: C2061
delete[] parFoo;
}
...次にC2061を取得します。これは、今回ppFoo
は間違った場所にある識別子であることを意味します。
これを引き起こす構文規則は何ですか。つまり、コンストラクター呼び出し表記を使用して、ポインターへのポインターを定義できず、「ポイントが少ない」タイプのみを定義できるのはなぜですか。