繁体   English   中英

在这种情况下魔术数字还可以吗?

[英]Are Magic Numbers Okay In This Instance?

这个数组中关于幻数的问题,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]; 
}

预先感谢,ell。

编辑:长度存储在数组中的原因是因为我正在使用Boost :: multi_array,这就是它们的存储方式。 对代码破损表示歉意! 我稍后可以解决-目前,我仅想了解魔术数字,尽管它仍然很有用,谢谢!

不,魔术数字不是显而易见的数字。 -101通常是显而易见的,但并非总是如此。

就您而言,您的片段都不对我显而易见。 为什么将地图数据的宽度存储在数组中?

在没有看到更多代码的情况下,我希望这样做:

auto GoRPG::MapData::GetWidth() {
    return mData.shape()[width_index]; 
}

我认为您应该为此情况定义一个常量,而不要使用数字。 在访问第一个元素是很直观的事情的情况下,0并不总是“神奇”的。 示例:检查字符串的第一个字节,没有理由定义c_first_byte常量。)

但是在您的代码中,最好添加一个形状为m x()的方法x()来返回所需的值。 无需向用户公开mDatashape的内部表示。

该代码虽然不能编译。 从那时起,您就没有使用decltype来推断返回类型。 所有形状的宽度都相同吗?

如果是,则应该可以。 如果不是,那么更好的方法可能是提供默认参数。

  auto MapData::GetWidth(const size_t index = 0) -> decltype( mData.shape()[0]) { 
    return mData.shape()[index];  
  } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM