gpt4 book ai didi

c++ - 将数据放在类声明中?

转载 作者:太空狗 更新时间:2023-10-29 20:15:36 24 4
gpt4 key购买 nike

one of Stroustrup's faq question ,他给出了以下示例:

template<class Scalar> class complex {
public:
complex() : re(0), im(0) { }
complex(Scalar r) : re(r), im(0) { }
complex(Scalar r, Scalar i) : re(r), im(i) { }
// ...

complex& operator+=(const complex& a)
{ re+=a.re; im+=a.im; return *this; }
// ...
private:
Scalar re, im;
};

并描述:

此类型旨在用作内置类型,在声明中需要表示才能创建真正的本地对象(即在堆栈上分配的对象而不是在堆上)并确保简单操作的正确内联

谁能解释一下?将reim 数据放在类声明中会使类对象在堆栈上分配?那么内联呢? (我可以看到内联了一个operator+=,他是这个意思吗?)

最佳答案

成员reim 分配在每个complex 对象中。这意味着 reim 被分配到堆栈上 当且仅当 整个 complex 对象是。如果 complex 对象是全局对象,则 reim 既不在栈上也不在堆上。

在实践中,编译器会将 re 放在对象的偏移量 0 处,将 im 放在偏移量 sizeof(Scalar) 处。这意味着 operator+= 的代码不需要大量的汇编指令来获取这些成员。实际添加本身可能只是两条汇编指令,因此加载 4 个成员并存储两个结果是工作的主要部分。如果要内联的内容很少,内联效果最好。

关于c++ - 将数据放在类声明中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12419732/

24 4 0