当我使用构造函数调用表示法(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
在错误位置的标识符。
什么语法规则导致了这种情况,即为什么不能使用构造函数调用符号来定义指向指针的指针,而只能使用“较少程度指向”类型?