例如这样的声明:
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;
但是我从未见过有人实际使用过这样的声明。因此,我很感兴趣-这种可能性的目的是什么,因为到目前为止,我看到它只会创建类似于臭名昭著的“最令人烦恼的分析”的案例,并且没有添加任何有用的信息?