0
次のコードのx86-64asm generated by GCC 7.1を見ると、a
のコンストラクタでコードが生成され、b
にはコンストラクタのラベルがありません。なぜデフォルトの空のコンストラクタがC++で異なるマシンコードを生成するのですか?
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
@EJP、彼はリンクでgodboltのコードを示しました。 – prl
最適化の有無にかかわらずコンパイルしていますか?これが理由でない場合(例えば、 '-O0')。 – Peter