gpt4 book ai didi

c++ - 如何公开常量数据

转载 作者:行者123 更新时间:2023-11-28 06:31:03 29 4
gpt4 key购买 nike

我正在编写单元测试用例,为此我编写了一些结构及其数组,用于保存它们的输入数据和正确的结果。数据是这样的

.e.g 测试返回 a,b 的 sum(a,b) 我有下面的代码

struct Data
{
const int a,b,c;
};

Data arr[] =
{
{1,0,1};
(2,1,3};
}

const unsigned int getsizeofarr()
{
return sizeof(arr)/sizeof(arr[0]);
}

我不确定这是否是用 OOPS 的说法公开数据的最佳方式。我已将变量设为 const,但 const_cast 可以轻松删除它并修改数据。让我知道如何公开我的测试数据,以便它保持常量并且也可供测试用例访问。

提前致谢

最佳答案

您可以像这样创建访问器方法:

class Data
{
public:
inline int GetA() const { return a; }
inline int GetB() const { return b; }
inline int GetC() const { return c; }
private:
const int a, b, c;
};

访问方法 是不改变对象状态的方法。它们只是用于通过提供额外的访问层来控制对对象内数据的访问的方法。这样,用户将无法直接访问,而必须通过访问器方法才能访问原始数据。

要避免 const_cast 改变您的只读 数据,最简单的方法是隐藏数据的内存位置,这意味着用户既不能获得引用也不能获得指向您数据的指针。这实质上意味着您需要向用户提供您的数据拷贝。

从您的示例来看,您似乎只使用了 int,因此返回拷贝通常并不昂贵。但是,想象一下,如果您有一个包含 1000000 个 intvector。尝试复制它的成本相当高(想想如何复制 1000000 个 int 的数组)。在数据大小不小的情况下,您可能希望返回对数据的只读引用,以防止像这样进行任何复制。

class Data
{
public:
inline const std::array<int, 1000>& GetA() const { return a; }
inline const std::array<int, 1000>& GetB() const { return b; }
inline const std::array<int, 1000>& GetC() const { return c; }
private:
const std::array<int, 1000> a, b, c;
};

所以最后,您必须做出判断。数据安全比性能更重要吗?如果是这样,隐藏数据并只返回数据的拷贝。否则,数据大小可以忽略不计吗?如果是,则返回引用 might actually be more expensive而不是简单地复制数据,否则返回只读引用。

伪代码:

If security is more important than performance
Return a copy
Otherwise
If size of data is of negligible size
Return a copy
Otherwise
Return a read-only reference

关于c++ - 如何公开常量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27562225/

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