Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;变量去相关语法_C++_C_Syntax_Declaration - Fatal编程技术网

C++ 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(m); 这似乎相当于: int m

奇怪的是,我以前从未见过这个成语。有人能给我指一个参考点,我可以在这里阅读规范,或者直接解释?这在C语言中也适用吗

谢谢, ConfusedDeveloper

这不是一个“习语”。它只是一对多余的括号。从语法上讲,它们可以在那里,但它们没有任何用途

有时类似的多余的圆括号可以用来解决C++声明中的模糊性,如

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:是的。因为它看起来很相似,这就是我发布它的原因。只是想告诉他这也是它的用法。:-)