0
다음 코드에 대해 x86-64asm generated by GCC 7.1을 보면 의 생성자는 코드를 생성하고 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
최적화 여부에 상관없이 컴파일 중이십니까? without (예 :'-O0')이 그 이유 일 것입니다. – Peter