Mao*_*Mao 38 c++ variable-declaration language-lawyer c++11
如果您查看语法,*declarator*s in §8/4
您会注意到a noptr-declarator
可以写成(ptr-declarator
),也就是说,它可以写成(declarator-id
),它可以验证标题中的声明.事实上,这段代码编译没有问题:
#include <iostream>
struct A{ int i;};
int (x) = 100;
A (a) = {2};
int main()
{
std::cout << x << '\n';
std::cout << a.i << '\n';
}
Run Code Online (Sandbox Code Playgroud)
但是当声明中没有涉及指针(数组或函数)时允许这些括号的目的是什么?
Col*_*mbo 52
这条规则适用于您的情况这一事实并非故意:这最终是保持语法简单的结果.没有动机禁止像你这样的声明,但是有很大的抑制因素使规则复杂化,特别是如果这些规则错综复杂的话.
简而言之,如果您不想使用这种不必要的混淆语法,请不要这样做.
C++很少强迫您编写可读代码.
令人惊讶的是,有些情况下括号可以节省一天,但是:
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à!
};
}
Run Code Online (Sandbox Code Playgroud)