vs关于调试C++程序的问题

环境:
Microsoft Visual Studio Community 2022 (64 位) 版本 17.5.5

程序如下,当单步执行fun()中的三条语句时,实际执行的顺序为:

  1. A a; 2. return a; 3. int b = 3; 4. return a;
    不应该是1.A a; 2. int b = 3; 3. return a; 吗?
#include <iostream>
using namespace std;
class A
{
public:
    A() { a = 5; }
    ~A() {}
    int a;
};
A fun()
{

    A a;
    int b = 3;
    return a;
}
int main()
{
    fun();
    return 0;
}

fun()函数的的反汇编:

A fun()
{
    00F61FE0  push        ebp
        00F61FE1  mov         ebp, esp
        00F61FE3  sub         esp, 0F4h
        00F61FE9  push        ebx
        00F61FEA  push        esi
        00F61FEB  push        edi
        00F61FEC  lea         edi, [ebp - 34h]
        00F61FEF  mov         ecx, 0Dh
        00F61FF4  mov         eax, 0CCCCCCCCh
        00F61FF9  rep stos    dword ptr es : [edi]
        00F61FFB  mov         dword ptr[ebp - 0ECh], 0
        00F62005  mov         ecx, offset _23EFC97D_ConsoleApplication1@cpp(0F6E067h)
        00F6200A  call        @__CheckForDebuggerJustMyCode@4 (0F6137Fh)
        A a;
    00F6200F  mov         ecx, dword ptr[a]
        00F62012  call        A::A(0F614A6h)
        00F62017  mov         dword ptr[ebp - 0F4h], eax
        return a;//这是编译器添加的代码,作用是什么?
    00F6201D  mov         eax, dword ptr[ebp - 0ECh]
        00F62023 or eax, 1
        00F62026  mov         dword ptr[ebp - 0ECh], eax
        int b = 3;
    00F6202C  mov         dword ptr[b], 3
        return a;
    00F62033  mov         eax, dword ptr[a]
}
00F62036  push        edx
00F62037  mov         ecx, ebp
00F62039  push        eax
00F6203A  lea         edx, ds: [0F6205Ch]
00F62040  call        @_RTC_CheckStackVars@8 (0F6122Bh)
00F62045  pop         eax
00F62046  pop         edx
00F62047  pop         edi
00F62048  pop         esi
00F62049  pop         ebx
00F6204A  add         esp, 0F4h
00F62050  cmp         ebp, esp
00F62052  call        __RTC_CheckEsp(0F6128Fh)
00F62057  mov         esp, ebp
00F62059  pop         ebp
00F6205A  ret

b = 3 没用到
可能编译器优化掉了
你在b=3后面加上一个 cout << b; 看看