编译器在C++中如何解析数组声明

How is an array declaration resolved by the compiler in C++?

本文关键字:何解析 数组 声明 C++ 编译器      更新时间:2023-10-16

假设我们有一行是数组定义:

char v[100];

评估这个定义的后续步骤是什么?我认为首先评估char v定义,并进一步应用于未初始化的变量v运算符[]。但这是无稽之谈。我想了解,为什么这个定义返回char*。如果可能的话,请参考规范

char v[100]是一个变量声明。

这里没有语句或表达式,因此不需要评估任何内容。

将对CCD_ 6进行评估。

将对CCD_ 7进行评估。

将对CCD_ 8进行评估。

但不是char v[100]

例如,以下是Microsoft Visual C++编译器评估char v[100] = "abc"的方法:

    char v[100] = "abc";
001B1DA8  mov         eax,dword ptr [string "abc" (1B695Ch)]  
001B1DAD  mov         dword ptr [ebp-6Ch],eax  
001B1DB0  push        60h  
001B1DB2  push        0  
001B1DB4  lea         eax,[ebp-68h]  
001B1DB7  push        eax  
001B1DB8  call        @ILT+135(_memset) (1B108Ch)  
001B1DBD  add         esp,0Ch  

您可以自己查看char v[100]的反汇编,并看到"背后没有代码"。