gpt4 book ai didi

c++ - 为什么默认构造函数和空构造函数在 C++ 中生成不同的机器代码?

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:09 25 4
gpt4 key购买 nike

查看 x86-64asm generated by GCC 7.1 时对于下面的代码,我发现 a 的构造函数生成代码,而 b 没有构造函数的标签。

class a {
public:
int aint;

a() { }
};

class b {
public:
int bint;

b() = default;
};

int main() {
a ac;
// lea rax, [rbp-4]
// mov rdi, rax
// call a::a()
ac.aint = 2;
// mov DWORD PTR [rbp-4], 2


b bc; // no instructions for this statement
bc.bint = 5;
// mov DWORD PTR [rbp-8], 5

return 0;
}

为什么这里为构造函数生成的代码会如此不同?为什么 a() { } 不会生成与 b() = default 相同的代码?

最佳答案

在没有优化 (-O0) 的情况下,gcc 生成的代码可以轻松调试,因此它包括源代码中的每个语句和函数调用。您可以在 a::a 上设置断点。使用任何更高的优化级别,您都不会看到该构造函数调用。

关于c++ - 为什么默认构造函数和空构造函数在 C++ 中生成不同的机器代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46385897/

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