【发布时间】:2018-03-05 06:48:03
【问题描述】:
查看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 相同的代码?
【问题讨论】:
-
不同代码如?
-
@EJP,他在链接中展示了godbolt中的代码。
-
你是在编译还是不优化?如果没有(例如
-O0),这就是原因。 -
@prl 他应该在这里展示它。不接受链接。
标签: c++ gcc x86 code-generation