声明如int(x)的目的是什么?或int(x)= 10;

时间:2014-11-09 19:28:25

标签: c++ c++11 language-lawyer variable-declaration

如果您查看*declarator*s in §8/4的语法,您会注意到 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';
}

当声明中没有涉及指针(对数组或函数)时,允许这些括号的目的是什么?

2 个答案:

答案 0 :(得分: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à!
    };
}

答案 1 :(得分:4)

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

  

取消此类声明的目的是什么?

答案是:没有

所以,鉴于这种语法被允许作为其他地方的规则的副作用,这就是你得到的。