在这种情况下,幻数可以吗
Are Magic Numbers Okay In This Instance?
本文关键字:这种情况下 更新时间:2023-10-16
在这个关于数组中幻数的问题中,paxdiablo说,除-1、0和1之外的任何数字都是幻数。我知道这只是一个指导原则,但我想知道在指定多维数组的维度时,如果我需要定义维度为x、y和z的常量,是否可以这样做:
typedef boost::multi_array<TileID, 3> TileArray3D;
TileArray3D::size_type GoRPG::MapData::GetWidth() {
return mData.shape()[0];
}
或者这是优选的:
TileArray3D::size_type GoRPG::MapData::GetWidth() {
return mData.shape()[x_dimension];
}
提前谢谢,好吧。
编辑:长度存储在数组中的原因是我使用Boost::multi_array,这就是它们的存储方式。为损坏的代码道歉!我以后可以解决这个问题——现在我只想知道神奇的数字,尽管它仍然有用,谢谢!
-1
、0
和1
通常是明显的,但并不总是如此。
在你的情况下,你的两个片段对我来说都不明显。为什么你的地图数据的宽度存储在一个数组中?
如果没有看到更多的代码,我更喜欢这个:
auto GoRPG::MapData::GetWidth() {
return mData.shape()[width_index];
}
我认为应该为这种情况定义一个常量,而不是使用数字。在访问第一个元素是直观的事情的情况下,0并不总是"神奇"的。例如:检查字符串的第一个字节,没有理由定义c_first_byte
常量。)
但在您的代码中,最好为shape或mData添加一个名为x()
的方法,返回您想要的值。不需要向用户公开mData
或shape
的内部表示。
尽管如此,代码并没有编译。从那以后,您还没有使用decltype来推导返回类型。所有形状的宽度都一样吗?
如果是,那么应该没问题。如果不是,那么更好的方法可能是提供一个默认参数。
auto MapData::GetWidth(const size_t index = 0) -> decltype( mData.shape()[0]) {
return mData.shape()[index];
}
相关文章:
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 在这种情况下,java对象是否可以调用本机函数
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- 在这种情况下,我真的复制了字节还是复制了字符?
- 为什么在这种情况下,bool 类型的输出等于 0?
- 在这种情况下,如何传递成员函数而不是函数?
- 为什么在这种情况下递增阵列名称有效?
- 在这种情况下我应该使用哪种设计模式
- 为什么在这种情况下我需要 .template
- 在这种情况下,使用 string_view 是否会导致不必要的字符串复制?
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- 在这种情况下,"typename..."意味着什么?
- 为什么在这种情况下 x = 44?
- 在这种情况下是私有的吗?试图使操作员<<过载
- 在这种情况下,如何防止C++输出/控制台窗体关闭
- 为什么 lambda nullptr 取消引用在这种情况下有效?
- 为什么在这种情况下,前向声明不起作用?
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在这种情况下,为什么模板即时深度超过限制?
- 在这种情况下,当尝试从单独的类更新变量时,我是否需要使用指针?