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