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