クラスに対してコンストラクタが宣言されていない場合は、コンパイラによって生成されるコンストラクタがありません。以下の(G ++または打ち鳴らす++)をコンパイルし、このコードでnm -C
を行った後しかし 、 - 非PODのデータメンバを持っている - 私は、生成されたCTORを参照してください行います - PODとPODで生成されたコンストラクタと非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;
}
しかし、このコードでデータメンバ - 私にはありません。
class X
{
public:
void SetNum(int num) {m_x = num;}
private:
int m_x;
};
int main()
{
X x1;
x1.SetNum(8);
return 0;
}
私は両方のケースで生成されたコンストラクタを見るだろうと思いました。この動作は標準に準拠していますか?それとも、ここで何が起こっているのでしょうか? m_name
が構築デフォルトする必要があるよう
class X
{
public:
void SetName(std::string name) {m_name = name;}
private:
std::string m_name;
};
の場合
この最適化を無効にするために使用できるコンパイル\リンクフラグはありますか? – HeyJude
@HeyJudeわかりません。最適化を無効にすると効果的ですが、実際には解決策ではありません。あなたは本当にコンストラクタが必要ですか?それは非オペアンプです。 – NathanOliver
@HeyJude .oファイルを生成するだけでmain()でコードをコンパイルし、それらをチェックすることができます。 – Walter