请考虑以下代码:
int main() {
int(s);
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶它创建了有效的变量s.谁能解释一下这里发生了什么?
asc*_*ler 23
标准中的[dcl.meaning]说:
在声明
T D,其中D具有形式( D1 )所包含的类型说明符-ID是相同的,所述含有的声明符-ID的声明T D1.括号不会改变嵌入式声明符id的类型,但它们可以改变复杂声明符的绑定.
更简单地说,您可以将括号括在C++语法中被认为是"声明者"的任何地方.(松散地说,声明符是声明的一部分,没有包含一个名称的初始说明符和类型.)
在您的示例中,标识符s是声明符,因此您可以在其周围放置括号,并且含义不会更改.
正如第二个引用的句子提示的那样,其原因在于,当事情变得更加复杂时,这是必要的.一个例子:
int * a [10]; // a is an array of ten pointers to int.
int ( * b ) [10]; // b is a pointer to an array of ten ints.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |