C ++变量声明语法

时间:2011-01-18 19:09:39

标签: c++ c syntax declaration

我最近遇到过这个结构:     INT(M); 这似乎相当于:     int m;

奇怪的是,我以前从未见过这种特殊的习语。有人能指点我参考,我可以阅读这个规格,或直接解释?这是否也适用于直接C?

谢谢, ConfusedDeveloper

3 个答案:

答案 0 :(得分:11)

这不是“习语”。它只是一对冗余的括号。在语法上,他们可以在那里,但他们没有任何目的。

有时,类似看似多余的括号可用于解决C ++声明中的歧义,例如

int a(int());

声明一个函数可以变成

int a((int()));

相当于

int a = int();

并定义一个变量。但这并不是你所拥有的。

答案 1 :(得分:1)

它也用于演员。像,

double m= 10.0;
int n= int(m);

答案 2 :(得分:1)

除了其他答案之外,有时声明者必须加上括号 例如:

struct A {};

struct B { A a; };

namespace N {
  struct B { int a; };

  void f()
  {
    A (::B::*p) = &::B::a; // this () cannot be omitted
  }
}

如果上面的代码中省略了(),编译器会识别连续的嵌套 名称说明符A::B代替A::B,并会发出错误 这个括号是必要的,但有时会导致误导的情况。

struct A {
  int m;
  A() {}
  A( int ) {} // this isn't called
};

int i;

int main()
{
  A(i); // this is a declaration
  i.m = 1; // ok
}

在上面的代码中,A(i)是对象i的声明(在本例中也是定义), 而不是带有int参数i的构造函数调用表达式。

希望这有帮助。

相关问题