gpt4 book ai didi

c++ - POD 与非 POD 情况下生成的构造函数

转载 作者:行者123 更新时间:2023-11-30 01:42:48 24 4
gpt4 key购买 nike

我知道如果没有为类声明构造函数,编译器会生成一个。但是,在编译以下代码(g++ 或 clang++)并使用此代码执行 nm -C 之后 - 具有非 POD 数据成员 - 我确实看到了生成的 Ctor:

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;
}

我认为我会在这两种情况下看到生成的构造函数。这种行为是否符合标准?还是这里发生了其他事情?

最佳答案

如果是

class X
{
public:
void SetName(std::string name) {m_name = name;}
private:
std::string m_name;
};

必须生成构造函数,因为 m_name 需要默认构造。

如果是

class X
{
public:
void SetNum(int num) {m_x = num;}
private:
int m_x;
};

默认构造 m_x 等同于什么都不做,因为变量未初始化。由于不生成和调用构造函数与构造函数执行相同的操作,因此编译器可以在 "as-if" rule 下对其进行优化。 .

关于c++ - POD 与非 POD 情况下生成的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com