我最近发现了这个结构:
int(m);
它似乎等同于:
int m;
奇怪的是,我以前从未见过这种特定的惯用法。有人能指点我一个参考资料吗?或者直接解释一下?这在纯C中也适用吗?
谢谢, 困惑的开发者
奇怪的是,我以前从未见过这种特定的惯用法。有人能指点我一个参考资料吗?或者直接解释一下?这在纯C中也适用吗?
谢谢, 困惑的开发者
这不是一种“惯用语”。它只是一对多余的括号。从语法角度来看,它们可以存在,但它们没有任何作用。
有时候,在 C++ 声明中使用类似的冗余括号可以解决歧义问题,例如:
int a(int());
可以将声明为可转换为函数的函数
int a((int()));
等同于
int a = int();
并且定义一个变量。但这并不完全符合您的情况。
cout << int(n)
,但不能写成 cout << int n
。 - suszterpatt()
,这是完全不同的问题。 - AnT stands with Russia它也用于类型转换。比如,
double m= 10.0;
int n= int(m);
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
的构造函数调用表达式。
int m;
。 - Zac Howland