例如这样的声明:
int (x) = 0;
甚至是:
int (((x))) = 0;
我偶然发现了这一点,因为在我的代码中我碰巧有一个类似于以下的片段:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
显然我想构造一个对象C
,然后在它的析构函数中做一些有用的事情。但是,编译器将其视为具有类型C (y);
的变量声明,因此它会打印有关重新定义的错误。有趣的是,如果我将它写成或类似的东西,它将按预期编译。当然,最好的现代解决方法是在构造函数调用中使用。y
C
y
C (y).f ()
C (static_cast<B*> (y))
{}
因此,正如我在那之后发现的那样,可以声明变量int (x) = 0;
,甚至是int (((x))) = 0;
,但我从未见过有人真正使用这样的声明。所以我很感兴趣——这种可能性的目的是什么,因为现在我看到它只会创建类似于臭名昭著的“最令人烦恼的解析”的案例并且没有添加任何有用的东西?