像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à! }; }
你问的是错误的问题。 正确的问题是:
禁止这种声明的目的是什么?
答案是: 没有 。
所以,鉴于这个语法被允许作为别处规则的副作用,这就是你所得到的。