我最近遇到过这个结构: INT(M); 这似乎相当于: int m;
奇怪的是,我以前从未见过这种特殊的习语。有人能指点我参考,我可以阅读这个规格,或直接解释?这是否也适用于直接C?
谢谢, ConfusedDeveloper
答案 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
的构造函数调用表达式。
希望这有帮助。