Я знаю, что если конструктор не объявлен для класса, компилятор его сгенерирует. Однако после компиляции следующей (г ++ или звоном ++) и делать nm -C
с этим кодом - то есть не-POD элемент данных - я вижу сгенерированную CTOR:Генерируемый конструктор в случаях POD vs non-POD
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;
}
Но с этим кодом - с POD член данных - я не:
class X
{
public:
void SetNum(int num) {m_x = num;}
private:
int m_x;
};
int main()
{
X x1;
x1.SetNum(8);
return 0;
}
Я думал, что я увижу сгенерированный конструктор в обоих случаях. Соответствует ли это стандарту стандарту? Или это что-то еще, что здесь происходит?
Есть ли компиляция \ связанный флаг, который я могу использовать для отключения этой оптимизации? – HeyJude
@HeyJude Я не уверен. Отключение оптимизации может помочь, но это действительно не решение. Вам действительно нужен конструктор? Это не-op. – NathanOliver
@HeyJude Вы можете скомпилировать коды без main(), просто создавая файлы .o и проверяя их. – Walter