gpt4 book ai didi

c++ - C++ 中的编译器如何解析数组声明?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:50 25 4
gpt4 key购买 nike

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

char v[100];

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

最佳答案

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

这里没有语句或表达式,因此不需要求值。

char v[100] = "abc" 将被评估。

v[3] = 'd' 将被评估。

return v[4] 将被评估。

但不是 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]的反汇编,发现“后面没有代码”。

关于c++ - C++ 中的编译器如何解析数组声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23173134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com