像int(x)这样的声明的目的是什么? 或者int(x)= 10;

如果你*declarator*s in §8/4查看*declarator*s in §8/4语法,你会发现noptr-declarator可以写成( ptr-declarator ),也就是说,它可以写成( declarator-id ),validation标题中的声明。 事实上,这个代码编译没有问题:

 #include <iostream> struct A{ int i;}; int (x) = 100; A (a) = {2}; int main() { std::cout << x << '\n'; std::cout << ai << '\n'; } 

但是当指针(到数组或函数)不在声明,允许这些括号的目的是什么

这个规则适用于你的情况不是故意的:这最终是保持语法简单的结果 。 没有禁止像你这样的声明的动机,但有很大的阻碍使规则复杂化,尤其是如果这些规则错综复杂的话。

总之,如果你不想使用这个不必要的混淆语法,不要。
C ++很less强制你写可读的代码。

令人惊讶的是,有些情况下括号可以节省一天,但是:

 std::string foo(); namespace detail { int foo(long); // Another foo struct Bar { friend std::string ::foo(); // Doesn't compile for obvious reasons. friend std::string (::foo)(); // Voilà! }; } 

你问的是错误的问题。 正确的问题是:

禁止这种声明的目的是什么?

答案是: 没有

所以,鉴于这个语法被允许作为别处规则的副作用,这就是你所得到的。