gpt4 book ai didi

c++ - 强制编译器在 C++ 中提供默认构造函数

转载 作者:太空狗 更新时间:2023-10-29 23:22:49 26 4
gpt4 key购买 nike

我编写了一个没有定义任何构造函数的 C++ 程序。以下是代码:

#include<iostream>
using namespace std;
class test
{
public:

void print()
{
cout<< "Inside Print"<<endl;
}
};
int main()
{
test t;
t.print();
return 0;
}

当我反汇编代码时,我没有发现任何调用默认构造函数的地方。下面是main函数的汇编代码片段:

8 main:
9 .LFB1516:
10 pushl %ebp
11 .LCFI0:
12 movl %esp, %ebp
13 .LCFI1:
14 subl $8, %esp
15 .LCFI2:
16 andl $-16, %esp
17 movl $0, %eax
18 subl %eax, %esp
19 leal -1(%ebp), %eax
20 movl %eax, (%esp)
21 call _ZN4test5printEv
22 movl $0, %eax
23 leave
24 ret

如您所见,上面的代码片段(第 21 行)中只有一条 call 指令。它正在调用 print() 函数。现在我稍微修改了我的代码并引入了一个constructor。以下是代码:

#include<iostream>
using namespace std;
class test
{
public:
test()
{
}
void print()
{
cout<< "Inside Print"<<endl;
}
};
int main()
{
test t;
t.print();
return 0;
}

再次反汇编代码,发现如下:

 8 main:
9 .LFB1519:
10 pushl %ebp
11 .LCFI0:
12 movl %esp, %ebp
13 .LCFI1:
14 subl $8, %esp
15 .LCFI2:
16 andl $-16, %esp
17 movl $0, %eax
18 subl %eax, %esp
19 leal -1(%ebp), %eax
20 movl %eax, (%esp)
21 call _ZN4testC1Ev
22 leal -1(%ebp), %eax
23 movl %eax, (%esp)
24 call _ZN4test5printEv
25 movl $0, %eax
26 leave
27 ret

如您所见,它在第 21 行调用了构造函数。现在我的问题是,如果我没有在我的代码中定义任何构造函数,编译器不会在所有情况下都提供默认构造函数吗?如果没有,那么在什么情况下或者更确切地说,我如何才能强制编译器为我提供默认构造函数???

抱歉这个冗长的问题:P

最佳答案

程序的行为应该如此。机器代码生成不是标准的一部分,您无权期望任何特定的机器代码输出 — 您只能保证输出程序按照您的指示执行。

关于c++ - 强制编译器在 C++ 中提供默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18833111/

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