Ich weiß, dass, wenn kein Konstruktor für eine Klasse deklariert ist, der Compiler einen generiert. Nachdem jedoch das folgende (g ++ oder Klirren ++) Kompilieren und nm -C
mit diesem Code zu tun - das ist ein nicht-POD Datenelement - ich das erzeugte Ctor tun sehen:Erstellter Konstruktor für POD- und Nicht-POD-Fälle
class X
{
public:
void SetName(std::string name) {m_name = name;}
private:
std::string m_name;
};
int main()
{
X x1;
x1.SetName("jude");
return 0;
}
Aber mit diesem Code - mit einem POD Datenelement - ich nicht:
class X
{
public:
void SetNum(int num) {m_x = num;}
private:
int m_x;
};
int main()
{
X x1;
x1.SetNum(8);
return 0;
}
Ich dachte, dass ich in beiden Fällen einen generierten Konstruktor sehen würde. Entspricht dieses Verhalten dem Standard? Oder ist es etwas anderes, das hier vor sich geht?
Gibt es eine Compilation \ Linking Flag, die ich verwenden kann, um diese Optimierung zu deaktivieren? – HeyJude
@HeyJude Ich bin mir nicht sicher. Das Ausschalten von Optimierungen kann helfen, aber das ist wirklich keine Lösung. Brauchen Sie den Konstruktor wirklich? Es ist ein Nicht-OP. – NathanOliver
@HeyJude Sie können die Codes ohne main() kompilieren, indem Sie einfach .o Dateien erzeugen und diese überprüfen. – Walter