gpt4 book ai didi

c++ - 基类中的常量与派生类中的静态常量

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:19 24 4
gpt4 key购买 nike

您认为在以下两种情况下,性能/内存利用率会有什么不同吗?编译器是否会优化第一段代码以使两者之间没有任何区别。

class VersionBase 
{
public:
VersionBase(int iVer) : m_iVersion(iVer) {…};
int GetVersion() const { return m_iVersion; };
private:
const int m_iVersion;
}

class SomeVersionedDataObject : VersionBase
{
VersionedDataObject() : VersionBase(2) {…}; // Set version to whatever is the latest for the class


}

对比

class SomeVersionedDataObject
{
public:
VersionedDataObject()
int GetVersion() const { return m_iVersion; };
private:
static const int m_iVersion = 2;
}

最佳答案

非静态类成员,即使 const 也必须是类的每个对象的一部分。所以第二个定义将使用更少的内存,假设至少创建了两个实例。

编辑

内存使用量小且代码重复的解决方案如下:

// In one header
template <int version>
class VersionBase
{
public:
int GetVersion() const { return s_version; };
private:
static const int s_version;
};

template <int version>
const int VersionBase::s_version = version;


// Anywhere, using the header above
class SomeVersionedDataObject : public VersionBase<2>
{
:::
};

关于c++ - 基类中的常量与派生类中的静态常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17162622/

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