C++ C++;变量去相关语法
我最近遇到了这个结构: int(m); 这似乎相当于: int m 奇怪的是,我以前从未见过这个成语。有人能给我指一个参考点,我可以在这里阅读规范,或者直接解释?这在C语言中也适用吗 谢谢, ConfusedDeveloper这不是一个“习语”。它只是一对多余的括号。从语法上讲,它们可以在那里,但它们没有任何用途 有时类似的多余的圆括号可以用来解决C++声明中的模糊性,如C++ C++;变量去相关语法,c++,c,syntax,declaration,C++,C,Syntax,Declaration,我最近遇到了这个结构: int(m); 这似乎相当于: int m 奇怪的是,我以前从未见过这个成语。有人能给我指一个参考点,我可以在这里阅读规范,或者直接解释?这在C语言中也适用吗 谢谢, ConfusedDeveloper这不是一个“习语”。它只是一对多余的括号。从语法上讲,它们可以在那里,但它们没有任何用途 有时类似的多余的圆括号可以用来解决C++声明中的模糊性,如 int a(int()); 它声明一个函数可以转换为 int a((int())); 这相当于 int a = int(
int a(int());
它声明一个函数可以转换为
int a((int()));
这相当于
int a = int();
并定义了一个变量。但这并不完全是你的情况。它也被用来施法。像
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代码>次要挑剔:它并不总是多余的。例如,你可以写cout谢谢,这很有帮助。顺便说一句,成语的定义:一种语言特有的、经使用认可的表达方式。似乎是一个恰当的描述。@suszterpatt:问题是关于声明的。您的示例根本不涉及任何声明。您的示例是关于表达式中的()
,这是一个完全不同的故事。问题是关于声明,而这根本不是一个声明,只是一些看起来类似的东西。@aschepper:是的。因为它看起来很相似,这就是我发布它的原因。只是想告诉他这也是它的用法。:-)